Мне интересно, если есть рекомендуемый способ сделать глубокий клон / копию экземпляра в Java.
Я имею в виду 3 решения, но я могу пропустить некоторые, и я хотел бы узнать ваше мнение
отредактируйте: включите предложение Bohzo и уточните вопрос: это больше о глубоком клонировании, чем мелком клонировании.
Сделай сам:
закодируйте свойства клона вручную после свойств и убедитесь, что изменяемые экземпляры тоже клонированы.
pro:
- контроль над тем, что будет выполнено
-
минусы быстрого выполнения :
- утомительно писать и поддерживать
- склонны к ошибкам (ошибка копирования / вставки, отсутствующее свойство, переназначенное изменяемое свойство)
Используйте отражение:
С помощью ваших собственных инструментов отражения или с помощью внешнего помощника (например, jakarta common-bean) легко написать общий метод копирования, который будет выполнять работу в одну строку.
Pro:
- Легко писать
- Нет
минусов в обслуживании :
- Меньше контроля над тем, что происходит
- Ошибка подвержена изменчивому объекту, если инструмент отражения тоже не клонирует дочерние объекты
- Более медленное выполнение
Используйте клон рамки:
Используйте платформу, которая сделает это за вас, например:
commons-lang SerializationUtils
Библиотека глубокого клонирования Java
Dozer
Kryo
за:
- так же, как отражение
- больше контроля над тем, что именно будет клонировано.
минусы:
- каждый изменяемый экземпляр полностью клонируется, даже в конце иерархии
- может выполняться очень медленно
Используйте инструментарий байт-кода для записи клона во время выполнения
javassit , BCEL или cglib могут быть использованы для генерации выделенного клонера так же быстро, как написана одна рука. Кто-то знает библиотеку, использующую один из этих инструментов для этой цели?
Что я здесь упустил?
Какой из них вы бы порекомендовали?
Спасибо.