Как передать данные между классами в Java [закрыт]

146
19 января 2019, 10:50

Пробую писать программу на Java и столкнулся со следующей проблемой: у меня есть массив данных, который я генерирую в классе1, его нужно передать в класс2, изменить данные в нем и вернуть в класс1, чтобы при следующем обращении к нему данные уже были изменены. У меня выходит только передача в класс2, но измененный массив не могу передать обратно. Как это можно реализовать?

Answer 1

Думаю, прежде всего стоит понять, что ты работаешь не с классами, а с их экземплярами. И ты не переходишь между классами... а можешь из объекта одного класса вызвать метод объекта другого...

ClassOne() {
  private var;
  public void method(){
  var = new ClassTwo().somemethod(array[]);
  }
}

Соответственно,после отработки кода данные находятся не в классе ClassOne, а только в его отдельном экземпляре... И, если, на этот экземпляр больше нет никаких ссылок, то все отработанные данные будут попросту уничтожены сборщиком мусора.

Данные хранит не класс, а объект и у объекта есть время жизни. Чтобы сохранить данные на длительное время, можно отправить их в базу данных или записать в фаил...

Answer 2
  • Правильней всего будет сделать массив в классе 1 приватным полем и содать публичные методы для его изменения, которые будите вызывать в классе 2.
  • Так же можно создать в классе 1 публичный метод геттер, который будет возвращать этот массив, и вызывать этот метод в классе 2, а уже в классе 2 менять массив как вам надо.
Answer 3

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

public class ClassOne {
    private Data[] data;
    private ClassTwo processor; // инициализируйте сетером, конструктором ClassOne или прямо тут
    // какие-то другие поля и методы этого класса
    public void work() {
        if (data == null) {
            this.data = generateData();
        }
        // какой-то другой необязательный код
    }
    private Data[] generateData() {
        Data[] data = ... // дальше код генерации начальных данных
        processor.processData(data);
        return data
    }
}

public class ClassTwo {
    // какие-то поля и методы этого класса
    public void processData(Data[] data) {
        // код обработки данных
    }
}

Затем просто вызывайте метод work().

READ ALSO
Выстроить блок в линию с переносом

Выстроить блок в линию с переносом

Как сделать, чтобы все дочерние элементы block были бы в одну строку, а если они не помещаются по ширине, то переносились бы на следующую, но не каким-то...

156
Порядок выполнения needle

Порядок выполнения needle

Помогите пожалуйста с порядком выполненияНе могу понять, как сделать порядок выполнения

159
Выход из try-catch

Выход из try-catch

Использую axios для отправки запросов во vuejs 2 в laravel 5

172
Запуск N Promise параллельно с потоком в k Promise

Запуск N Promise параллельно с потоком в k Promise

Итак, я пытаюсь написать программу, запускающую N Promise с потоком в k Promise параллельноПроблема в том, что при запуске без yield sleep 1 программа запускает...

172