Мені цікаво, чи є рекомендований спосіб зробити глибокий клон / копію екземпляра в Java.
Я маю на увазі 3 рішення, але я можу пропустити деякі, і я хотів би мати вашу думку
редагувати: включити прополізон Bohzo та уточнити питання: мова йде більше про глибоке клонування, ніж про дрібне клонування.
Зроби це сам:
кодуйте клон за властивостями вручну після властивостей і переконайтесь, що також змінюються екземпляри, що змінюються.
pro:
- контроль того, що буде виконано
- швидкі
мінуси виконання :
- стомлююче писати та підтримувати
- схильний до помилок (помилка копіювання / вставки, відсутність властивості, переназначена властивість, що змінюється)
Використовуйте відображення:
За допомогою власних інструментів рефлексії або із зовнішнім помічником (як, наприклад, якарта звичайна квасоля) легко написати загальний метод копіювання, який виконає роботу в одному рядку.
pro:
- легко писати
- немає
мінусів обслуговування :
- менший контроль того, що відбувається
- помилка, схильна до змінного об'єкта, якщо інструмент відображення теж не клонує суб'єкти
- повільніше виконання
Використовуйте клонну рамку:
Використовуйте рамки , які роблять це для вас, як:
Загально-Ланг SerializationUtils
Java Deep Cloning Library
Бульдозер
Kryo
pro:
- те саме, що і рефлексія
- більше контролю над тим, що саме буде клоновано.
мінуси:
- кожен змінений екземпляр повністю клонований, навіть наприкінці ієрархії
- може бути дуже повільним для виконання
Використовуйте інструменти байт-коду для написання клону під час виконання
javassit , BCEL або cglib можуть бути використані для створення виділеного клонера так швидко, як написано однією рукою. Хтось знає ліб, використовуючи для цього один із цих інструментів?
Що я тут пропустив?
Який би ви порадили?
Дякую.