Java возвратная копия, чтобы скрыть будущие изменения - PullRequest
5 голосов
/ 27 августа 2008

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

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

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

Ответы [ 3 ]

4 голосов
/ 27 августа 2008

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

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

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

2 голосов
/ 27 августа 2008

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

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

1 голос
/ 27 августа 2008

Полагаю, это громоздкий ответ:

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

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

...