#java #ооп #getter
Есть задача отображения объекта внешнему классу, например массива. Но без возможности редактирования во внешнем классе Пример геттера private int[] arr; public int[] getArr() { return arr; } вопрос: данный класс ведь передаст ссылку на объект, что позволяет им управлять во внешнем классе? Т.е. необходимо создавать клон объекта , чтобы не передать управление ?
Ответы
Ответ 1
Нужен именно обычный массив? Тогда arr.clone(). Если можно коллекцию, то на основе массива можно не модифицируемую коллекцию создать: Listitems = Collections.unmodifiableList(Arrays.stream(arr).boxed().collect(Collectors.toList())); Или из Guava ImmutableList: ImmutableList values = ImmutableList.copyOf(Arrays.stream(arr).boxed().collect(Collectors.toList())); Ответ 2
Да, в случае объекта передается ссылка, любой объект - ссылочный тип. У вас несколько путей в этом случае: 1.Использовать клонирование объекта и передавать клон. Плюс в том, что помогает всегда. Минус в том, что вы плодите объекты. 2.Модификатор final. Плюсы в быстродействии и потокобезопасности в комплекте, никаких лишних объектов. минусы в том, что не подойдет для всех объектов, например, для массива это не поможет. Не всегда есть возможность создавать такие переменные. 3.Возможно вы передаете объекты типа Integer, Long итд. Тогда можно просто передавать примитивы, там ссылок нет и изменений никаких не сделаешь. Плюсы и минусы слону понятны.
Комментариев нет:
Отправить комментарий