Возврат мелкой копии списка в геттеры и как вообще работают геттеры - PullRequest
0 голосов
/ 31 марта 2019

Я не уверен, как на самом деле работает создание мелкой копии в методах получения и как это нам поможет.

Работает ли оно как обычный метод получения, поскольку я могу получать информацию из этого списка всякий раз, когда я вызываюметод получения?

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


И я предполагаю, что здесь есть неявный вопрос,

Я уже некоторое время размышлял над этим:
Как и в примере ниже, некоторые люди просто звонили бы stringsполучить информацию из этого списка (так как в этом случае она является конфиденциальной, поэтому я полагаю, что она будет работать нормально?), где другие будут звонить this.strings или this.getStrings.
Я новичок в Java, поэтому все они, похоже, способны достичь того же результата, что меня так смущает.

Может кто-нибудь объяснить?Извините, если формулировка не ясна.





Код указан ниже:

import java.util.ArrayList;
import java.util.List;

public class Experiment {

    private List<String> strings;

    public Experiment(String string) {
        this.strings = new ArrayList<>();
    }

    public List<String> getStrings() {
        return strings;
    }

}

Некоторые программисты этого не делаютреализовать:

public List<String> getStrings() {
        return strings;
}

Вместо этого они делают:

public List<String> getStrings() {
        return new ArrayList<>(strings);
}

1 Ответ

0 голосов
/ 31 марта 2019

Первый код возвращает поверхностную копию strings. Возвращенная ссылка указывает на тот же объект ArrayList, что и ссылка, сохраненная в strings. Изменения, сделанные через них обоих, затронут один и тот же объект.

Второй код создает новый объект ArrayList и возвращает ссылку, указывающую на него. Новый объект имеет те же элементы, что и List в строках.

ArrayList (Коллекция c) Создает список, содержащий элементы указанной коллекции, в том порядке, в котором они возвращаются итератором коллекции.

Создается новый объект, поэтому изменения в возвращенном List не влияют на List в strings.

...