Возвращаемая копия Java, чтобы скрыть будущие изменения
Вопрос
Допустим, в Java у вас есть класс, который обертывает ArrayList
(или любую коллекцию) объектов.
Как бы вы вернули один из этих объектов, чтобы вызывающая сторона не увидела никаких будущих изменений объекта, сделанного в ArrayList?
то естьвы хотите вернуть глубокую копию объекта, но не знаете, можно ли его клонировать.
Решение
Превратите это в спецификацию:
-Ты объекты должны реализовать интерфейс, чтобы быть разрешенным в коллекцию что -то вроде ArrayList<ICloneable>()
Тогда вы можете быть уверены, что всегда выполняете глубокую копию — интерфейс должен иметь метод, который гарантированно возвращает глубокую копию.
Я думаю, это лучшее, что ты можешь сделать.
Другие советы
Один из вариантов — использовать сериализацию.Вот сообщение в блоге, объясняющее это:
http://weblogs.java.net/blog/emcmanus/archive/2007/04/cloning_java_ob.html
Полагаю, это очевидный ответ:
Сделайте обязательным условие для клонирования классов, хранящихся в коллекции.Вы можете проверить это во время вставки или во время извлечения, в зависимости от того, что имеет больше смысла, и выдать исключение.
Или, если элемент невозможно клонировать, просто вернитесь к опции возврата по ссылке.