Zastanawiam się, czy istnieje zalecany sposób wykonywania głębokiego klonowania / kopiowania instancji w Javie.
Mam na myśli 3 rozwiązania, ale niektórych mogę przegapić i chciałbym poznać Twoją opinię
edytuj: dołącz propositon Bohzo i doprecyzuj pytanie: bardziej chodzi o głębokie klonowanie niż płytkie klonowanie.
Zrób to sam:
zakoduj clone ręcznie właściwości po właściwościach i sprawdź, czy mutowalne instancje również są klonowane.
pro:
- kontrola tego, co zostanie wykonane
-
wady szybkiego wykonania :
- żmudne pisanie i konserwacja
- podatne na błędy (błąd kopiowania / wklejania, brakująca właściwość, ponownie przypisana zmienna właściwość)
Użyj odbicia:
Z własnymi narzędziami do refleksji lub z zewnętrznym pomocnikiem (takim jak fasolka dżakarta) łatwo jest napisać ogólną metodę kopiowania, która wykona zadanie w jednej linii.
pro:
- łatwy do napisania
- brak konserwacji
wady:
- mniejsza kontrola nad tym, co się dzieje
- podatne na błędy w przypadku obiektów mutowalnych, jeśli narzędzie odbicia nie klonuje również obiektów podrzędnych
- wolniejsze wykonywanie
Użyj struktury klonowania:
Użyj frameworka, który zrobi to za Ciebie, takiego jak:
commons-lang SerializationUtils
Java Deep Cloning Library
Dozer
Kryo
pro:
- to samo, co odbicie
- większa kontrola nad tym, co dokładnie zostanie sklonowane.
minusy:
- każda zmienna instancja jest w pełni sklonowana, nawet na końcu hierarchii
- może być bardzo powolna do wykonania
Użyj instrumentacji kodu bajtowego, aby napisać klon w czasie wykonywania
javassit , BCEL lub cglib mogą być użyte do wygenerowania dedykowanego klonera tak szybko, jak napisane jedną ręką. Ktoś zna bibliotekę używającą do tego celu jednego z tych narzędzi?
Co tu przegapiłem?
Który byś polecił?
Dzięki.