Передача значений переменных в Java

384
03 октября 2017, 03:57

Написал класс синглтон. В нем есть поле:

private ArrayList<Cash> storageList;

И геттер:

public ArrayList getStorageList();
return this.storageList;

Когда я из другого класса вызываю следующий метод:

CashStorage.getCashStorage().getStorageList().set(1, new Cash());

Компилятор это нормально пропускает. Но ведь поле storageList приватное, почему тогда получив ссылку из другого класса я имею возможность на него воздействовать?

Answer 1

Но Вы же геттером на него "воздействуете", а геттер публичный.

Answer 2

Дело в том, что когда вы пишете геттер, вы вправе не давать прямую ссылку на объект, а создать новый и отдать его, например:

public ArrayList<Cash> getStorageList() {
    return new ArrayList<>(this.storageList);
}
Answer 3

Ну если ты хочешь, чтобы он не изменялся используй final. И насчет доступа к приватным полям, насколько мне известно, к ним можно получать доступ с помощью рефлексии (без геттеров и сеттеров).

READ ALSO
В Activity не отображается TableLayout

В Activity не отображается TableLayout

Мне необходимо добавить TableLayout в LinearLayout, но при тестировании TableLayout добавляется (ясно, так как ScrolView пролистывается), но не отображается (в ячейках...

308
GMapsFX: Exception in Application start method

GMapsFX: Exception in Application start method

Я пытаюсь реализовать этот пример:

605
Не могу задать TextView

Не могу задать TextView

В классе привязанному к layout есть функция

370
Не запускается приложение на heroku

Не запускается приложение на heroku

Создал telegram bot'a на javaТеперь пытаюсь задеплоить его в heroku

467