Возвращаемая копия Java, чтобы скрыть будущие изменения

StackOverflow https://stackoverflow.com/questions/29820

  •  09-06-2019
  •  | 
  •  

Вопрос

Допустим, в Java у вас есть класс, который обертывает ArrayList (или любую коллекцию) объектов.

Как бы вы вернули один из этих объектов, чтобы вызывающая сторона не увидела никаких будущих изменений объекта, сделанного в ArrayList?

то естьвы хотите вернуть глубокую копию объекта, но не знаете, можно ли его клонировать.

Это было полезно?

Решение

Превратите это в спецификацию:
-Ты объекты должны реализовать интерфейс, чтобы быть разрешенным в коллекцию что -то вроде ArrayList<ICloneable>()

Тогда вы можете быть уверены, что всегда выполняете глубокую копию — интерфейс должен иметь метод, который гарантированно возвращает глубокую копию.

Я думаю, это лучшее, что ты можешь сделать.

Другие советы

Один из вариантов — использовать сериализацию.Вот сообщение в блоге, объясняющее это:

http://weblogs.java.net/blog/emcmanus/archive/2007/04/cloning_java_ob.html

Полагаю, это очевидный ответ:

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

Или, если элемент невозможно клонировать, просто вернитесь к опции возврата по ссылке.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top