2008-08-27 9 views
5

W Javie, powiedz, że masz klasę, która owija ArrayList (lub dowolną kolekcję) obiektów.Kopia zwrotna Java do ukrycia przyszłych zmian

Jak można zwrócić jeden z tych obiektów, tak aby dzwoniący nie widział żadnych przyszłych zmian w obiekcie dokonanym w ArrayList?

tj. Chcesz zwrócić głęboką kopię obiektu, ale nie wiesz, czy jest ona klonowalna.

Odpowiedz

4

kolei, że w specyfikacji:
-To obiekty muszą implementować interfejs, aby mieć do kolekcji Coś ArrayList<ICloneable>()

wtedy można mieć pewność, że zawsze wykonujesz głęboką kopię - interfejs powinien mieć metodę, która gwarantuje zwrócenie głębokiej kopii.

Myślę, że to najlepsze, co możesz zrobić.

1

Przypuszczam, że jest to odpowiedź ovbious:

Zrób warunkiem klas przechowywanych w zbiorach być Cloneable. Można to sprawdzić w czasie wstawiania lub w czasie pobierania, bez względu na sens i rzucić wyjątek.

Jeśli element nie jest klonem, po prostu powróć do opcji powracania według referencji.