Как получить доступ к типу возвращаемого значения метода из другого метода

У меня есть следующий код, где у меня в качестве входных данных в методе двойное число и 3 списка массивов объектов:

public static ArrayList<ELPERouteStop> relatedness(double pososto,ArrayList<ELPERouteStop> all_stops, ArrayList<Distance> distances, ArrayList<ELPEVehicleLoaded> vl_list)
{
//do stuff
return destroyedCustomers;
}

Мне нужно вызвать список destroyCustomers из другого метода того же класса. Другой класс будет:

public void destroySolution(ArrayList<ELPERouteStop> removedCustomers, SolutionCreated sc,ArrayList<shadowVehicle> all_svehicles)
{
//do stuff
}

который у меня в качестве ввода - список объектов, к которым мне нужно получить доступ. Могу ли я получить такой доступ? По своему основному методу я сделал следующее:

LNS lns = new LNS();
lns.destroySolution(LNS_Procedure.relatedness(0.15,all_route_stops, distances, vl_list), sc, all_svehicles);

Это сработает? Заранее большое спасибо!

Есть ли у вас основания сомневаться, что это сработает?

Hulk 17.09.2018 10:43

Я немного не понимаю, о чем вы спрашиваете. Если это общий случай, когда метод a вызывает результат метода b, то a(b()); вернет то, что вы хотите, как и ожидалось. Есть ли что-то иное в вашей ситуации?

Paul Benn 17.09.2018 10:46

Я верю, что это сработает, как вы утверждаете. Мне было интересно (так как я не разработчик), нормально ли это по поводу доступа. Еще раз спасибо

Dimitris Boukosis 17.09.2018 10:49

Метод может получить доступ к тому, что ему передано в качестве параметров - неважно, откуда оно взялось. Если два метода принадлежат к тому же классу, что и в вашем примере, проблем с видимостью быть не может. Связанное чтение о том, какие методы могут и не могут делать со своими параметрами в Java: stackoverflow.com/questions/40480/…

Hulk 17.09.2018 10:58
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
4
4
88
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Насколько я понимаю, это общий случай метода a, вызывающего метод b. Поскольку Java (и большинство языков) оценивают от самых внутренних операторов к внешним, он определенно работает так, как вы ожидаете:

a(b()); // Function composition, produces the result of applying a to the result of b

Java также передает ссылки по значению, что означает, что любые изменения в методе вызываемого объекта (кроме переназначения) будут видны вызывающему. В этом случае, если b() возвращает список, а a() добавляет элемент в этот список и возвращает его, при любом вызове метода a будет отображаться дополнительный элемент.

Другие вопросы по теме