Хорошо известно, что Cloneable
нарушен без ремонта (см. Обсуждение in this question для получения дополнительной информации).Современные альтернативы для клонирования?
Последние вопросы по альтернативам и "как делать это правильно" несколько лет:
- Are there any alternatives to implementing Clone in Java?
- How to properly override clone method?
- Clone() vs Copy constructor- which is recommended in java
- clone() vs copy constructor vs factory method?
- Polymorphic copy in Java
- Proper way to deep copy with copy constructor instead of Object.clone
Так что я хотел бы еще раз спросить:
Что современный день (2014) альтернативы Cloneable
?
Я ищу универсальное решение. Я мог бы представить себе следующие требования:
- Своего рода
Copyable
интерфейса, классы будут осуществлять:A extends Copyable
. - Глубокое копирование. Если значение
A
указывает экземплярB
,a.copy()
должен ссылаться на новыйb.copy()
. - Скопировать на указанную цель:
a.copyTo(a1)
. - Полиморфного копирование: если
B
расширяетA
тоa.copyTo(b)
следует скопировать все свойстваB
отa
кb
.
Конечно, я могу реализовать все это самостоятельно, но разве было бы разумно иметь стандартные интерфейсы для этого? Или я чего-то не хватает?
Немного фона для моего контекста. Я много работаю с JAXB и классами, производными от схемы. Часто чрезвычайно полезно иметь глубокое копирование для этих классов. Несколько лет назад я написал пару плагинов компилятора схемы JAXB для генерации copyTo
методов, которые выполняют требования выше (и более). Мне пришлось использовать свой собственный API времени выполнения. Теперь я пересматривал дело и решил спросить, есть ли стандартное решение.
Что здесь точно «основано на мнениях»? – lexicore