У меня есть следующий код, где у меня в качестве входных данных в методе двойное число и 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);
Это сработает? Заранее большое спасибо!
Я немного не понимаю, о чем вы спрашиваете. Если это общий случай, когда метод a вызывает результат метода b, то a(b()); вернет то, что вы хотите, как и ожидалось. Есть ли что-то иное в вашей ситуации?
Я верю, что это сработает, как вы утверждаете. Мне было интересно (так как я не разработчик), нормально ли это по поводу доступа. Еще раз спасибо
Метод может получить доступ к тому, что ему передано в качестве параметров - неважно, откуда оно взялось. Если два метода принадлежат к тому же классу, что и в вашем примере, проблем с видимостью быть не может. Связанное чтение о том, какие методы могут и не могут делать со своими параметрами в Java: stackoverflow.com/questions/40480/…




Насколько я понимаю, это общий случай метода a, вызывающего метод b. Поскольку Java (и большинство языков) оценивают от самых внутренних операторов к внешним, он определенно работает так, как вы ожидаете:
a(b()); // Function composition, produces the result of applying a to the result of b
Java также передает ссылки по значению, что означает, что любые изменения в методе вызываемого объекта (кроме переназначения) будут видны вызывающему. В этом случае, если b() возвращает список, а a() добавляет элемент в этот список и возвращает его, при любом вызове метода a будет отображаться дополнительный элемент.
Есть ли у вас основания сомневаться, что это сработает?