Сведения о вопросе

Getthesound

18:41, 3rd August, 2020

Теги

java   deep-copy   cloning    

Java возврат копии для скрытия будущих изменений

Просмотров: 456   Ответов: 3

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

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

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



  Сведения об ответе

KOMP

13:39, 2nd August, 2020

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

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

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


  Сведения об ответе

DINO

17:28, 13th August, 2020

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

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


  Сведения об ответе

KOMP

06:56, 6th August, 2020

Я полагаю, что это ответ ovbious:

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

Или, если элемент не может быть клонирован, просто вернитесь к параметру return by reference.


Ответить на вопрос

Чтобы ответить на вопрос вам нужно войти в систему или зарегистрироваться