2011-10-14 15 views
6

Przeczytałem javadoc zarówno dla Object i Cloneable i po prostu nie "dostaje" coś. Czy ktoś mógłby mi wyjaśnić, wydajności i/lub funkcjonalne różnice między dwoma następującymi przykładami:Nadpisywanie klonów zi bez Cloneable

public class Widget 
{ 
    @Override 
    public Widget clone() 
    { 
      // ... return a clone of this Widget 
    } 
} 

..i:

public class Widget implements Cloneable 
{ 
    @Override 
    public Widget clone() 
    { 
      // ... return a clone of this Widget 
    } 
} 

Od Cloneable nie ma żadnych metod przywiązane do niego, a tylko daje ci dostęp do chronionej metody klonowania() Object, czy kiedykolwiek ma sens nawet wdrożenie jej w ogóle, ponieważ będziesz musiał zakończyć pisanie własnego (bezpiecznego) kodu clone() w dowolny sposób ? Z góry dziękuję za wszelkie wyjaśnienia/dane wejściowe.

Odpowiedz

5

To jest contractual obligation.

Wywoływanie metody klonowania obiektu, na przykład, że nie realizacji z Cloneable wyniki interfejsu w wyjątku CloneNotSupportedException wyrzucane.

Chociaż nie może być żadnych metod, aby zastąpić, nadal wdraża interfejs jesteś częścią. Robiąc to, przejmujesz wszystko, co wiąże się z kolejną umową. Wymusza to świadome wdrażanie metody clone(), dzięki czemu zachowanie staje się wyraźne.

+0

Bardzo interesujące - dziękuję! – IAmYourFaja

+0

link już nie działa – marcospgp

0

a) Klonowanie wywołuje pozajęzykowy sposób konstruowania obiektów - bez konstruktorów.

b) Klonowanie wymaga traktowania w jakiś sposób za pomocą CloneNotSupportedException - lub zawracania sobie głowy kodem klienta do leczenia.

c) Korzyści są niewielkie - po prostu nie trzeba pisać ręcznie konstruktora kopiowania. Używaj więc Klasyfikująco odważnie. To nie daje ci wystarczających korzyści w porównaniu z wysiłkiem, który musisz zastosować, aby zrobić wszystko dobrze.

About Java cloneable

Powiązane problemy