Java getter для приватных объектов класса

290
12 ноября 2017, 14:59

Есть задача отображения объекта внешнему классу, например массива. Но без возможности редактирования во внешнем классе Пример геттера

private int[] arr;
public int[] getArr()
{
   return arr;
}

вопрос: данный класс ведь передаст ссылку на объект, что позволяет им управлять во внешнем классе? Т.е. необходимо создавать клон объекта , чтобы не передать управление ?

Answer 1

Нужен именно обычный массив? Тогда arr.clone().

Если можно коллекцию, то на основе массива можно не модифицируемую коллекцию создать:

List<Integer> items = Collections.unmodifiableList(Arrays.stream(arr).boxed().collect(Collectors.toList()));

Или из Guava ImmutableList:

ImmutableList<Integer> values = ImmutableList.copyOf(Arrays.stream(arr).boxed().collect(Collectors.toList()));
Answer 2

Да, в случае объекта передается ссылка, любой объект - ссылочный тип. У вас несколько путей в этом случае: 1.Использовать клонирование объекта и передавать клон. Плюс в том, что помогает всегда. Минус в том, что вы плодите объекты. 2.Модификатор final. Плюсы в быстродействии и потокобезопасности в комплекте, никаких лишних объектов. минусы в том, что не подойдет для всех объектов, например, для массива это не поможет. Не всегда есть возможность создавать такие переменные. 3.Возможно вы передаете объекты типа Integer, Long итд. Тогда можно просто передавать примитивы, там ссылок нет и изменений никаких не сделаешь. Плюсы и минусы слону понятны.

READ ALSO
ECJ перестал читать первый класс в списке

ECJ перестал читать первый класс в списке

Собираю APK через эмулятор терминала Termux прямо на устройстве Android из-за отсутствия нормального ПКИспользую измененный мной скрипт с https://github

258
Как в метод отправить одно значение вместо нескольких?

Как в метод отправить одно значение вместо нескольких?

Суть вопроса таковаНапример есть метод:frame

234
Краш приложения при добавлении данных в таблицу SQLite

Краш приложения при добавлении данных в таблицу SQLite

Добавляю данные в таблицу методом onClick

300
Подключение css к html в Java

Подключение css к html в Java

Не удается подключить css файл stylecss, который находится в папке css, html его просто не видит

507