Доступ к списку из статического метода в главном классе, в другом методе другого класса в Java
У меня есть вопрос, который может звучать как основной вопрос для экспертов. Но я не специалист по Java. Так что я не знаю и не могу найти подробности в Google по этому поводу. Надеюсь, кто-нибудь может мне помочь.
Я хочу получить доступ к одному списку из метода, который присутствует внутри класса Main для использования в другом методе другого класса в другом пакете. Все модификаторы доступа являются общедоступными. Возможно ли получить доступ в java8?
public class Main {
public static void main(String[] args) throws IOException {
initTariffData() ;
....
....
}
public static void initTariffData() {
List<List<Object>> SlotList = null;
.......
.......
for(int innerloop=0; innerloop<(CostList.size());innerloop++) {
newList = new ArrayList<>();
newList.add(PowerList.get(innerloop));
newList.add(DurationsList.get(innerloop));
newList.add(CostList.get(innerloop));
SlotList.add(newList); //Lists of all slots for 7 days
}
}
}
Другой класс:
public class MyModel implements TariffModel {
.....
//Here I want to access the List "Slotlist" from the function "initTariffData" in main class
....
}
Я надеюсь, что мой вопрос ясен и предоставляет необходимую информацию. Пожалуйста, дайте мне знать, если это все еще не ясно.
Я так много искал в google, но информации о доступе к переменной из другого метода внутри класса Main к другому классу пакета не так много.
2 ответа
Не прямой ответ на вопрос, а всего лишь несколько утверждений, чтобы убедить вас (надеюсь), что то, что вы пытаетесь сделать, не правильно.
Вы не рассуждаете в ООП оптике. Java является объектно-ориентированным языком и, как таковой, предлагает изолировать состояние и поведение объектов. Если у вас есть 2 объекта, как вам кажется, и вам нужно получить доступ к определенному свойству из первого во втором, это означает, что разделение интересов выполнено неправильно. Или, возможно, эти два объекта имеют некоторые общие черты, в этом случае они, вероятно, должны быть связаны в дереве наследования.
Как правило, объекты не должны напрямую выставлять свое состояние другим объектам, если это не является строго необходимым.
То, что может быть доступно для кода в другом классе, являются членами класса (методы и поля). Ваш список не является членом класса, это локальная переменная в методе. Он существует, только когда какой-то поток выполняет этот метод. Если два или более потоков одновременно выполняют этот метод, существует столько же экземпляров / появлений этой локальной переменной. Таким образом, в том случае, к какому из них вы бы хотели "получить доступ", а в случае, если его нет, как вы думаете, что в результате должно привести к "доступу к нему"?