Clone() - implementacja

Clone() - implementacja
MB
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 45
0

Pytanie:

  1. Jak skopiowac obiekt w Javie - metoda clone() 2. Dlaczego np. Vector ma własna implementacje clonealble
  1. Dla nowego typu: Klasa musi implementować interfejs Cloneable.
    Trzeba przeciążyć metodę:
Kopiuj
public Object clone(Object o) {
    Typ klon = (Typ) super.clone();  
     klon.pola = (Typ) pole.clone();
 ... 
    return klon;
}
  1. Dla klasy Vector...
    Analogicznie... kopiujemy tablice elementow np metoda copyOf i zerujemy modCount ?
    Czy coś więcej ? Przeciazanie Object clone() musi być metoda synchronizowana ? Dlatego że wektor jest synchronized ?
  • Rejestracja: dni
  • Ostatnio: dni
0
  1. Nie korzystaj z vectora, używaj arraylist.
  2. Po co Ci to? W codziennym programowaniu implementowanie klonowania jest bardzo (BARDZO) rzadko potrzebne.
  3. Interfejs cloneable musisz zaimplementować (jeśli tego nie zrobisz i użyjesz clone() dostaniesz wyjątek).
MB
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 45
0
  1. Czasem się przydaje.
  2. Tak, napisałem.

Spotkałem się z takim problemem i stąd pytanie czy trzeba jakoś specjalnie podchodzić do klonowania np. klasy implementującej Vector lub np. przy synchronizacji albo innych wyjątkach.

__krzysiek85
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 1019
1
  1. Czasem się przydaje.

Do robienia "armii klonów" w codziennym programowaniu służą fabryki, a nie metoda clone().

Analogicznie... kopiujemy tablice elementow np metoda copyOf i zerujemy modCount ?

A nie możesz sprawdzić w źródle?
http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/7-b147/java/util/Vector.java#Vector.clone%28%29

Czy coś więcej ? Przeciazanie Object clone() musi być metoda synchronizowana ? Dlatego że wektor jest synchronized ?

clone() nie musi być w ogólności synchronizowane.
Niektóre klasy (np. Vector) mają jednak napisane w dokumentacji, że można je używać w wielu wątkach. W takiej sytuacji clone() powinien być synchronizowany. Jeżeli dziedziczysz po takiej klasie, to dobrą praktyką jest to, aby klasy dziedziczącej też można było używać w wielu wątkach.

KR
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 2518
0

metoda clone() ssie, bo nigdy nie wiadomo czy chodzi o płytki czy głęboki klon

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.