Clone() - implementacja

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ę:
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 ?
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).
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.

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.

0

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

1 użytkowników online, w tym zalogowanych: 0, gości: 1