2011-10-14 15 views
6

Ho letto javadoc sia per Object che per Cloneable e sto semplicemente non "ottenendo" qualcosa. Qualcuno può spiegare a me le prestazioni e/o differenze funzionali ai due esempi che seguono:Clone di overriding con e senza Cloneable

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

..e:

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

Dal Cloneable non ha alcun metodo legato ad esso, e solo ti dà accesso al metodo clone() protetto da Object, ha sempre senso implementarlo anche in primo luogo, visto che dovrai scrivere il tuo codice clone() (sicuro) in ogni modo ? Grazie in anticipo per qualsiasi chiarimento/input.

risposta

5

È un contractual obligation.

Invocando metodo clone di Object in un'istanza che non implementa i risultati di interfaccia clonabile a eccezione CloneNotSupportedException che sono gettati.

Mentre non ci possono essere i metodi per eseguire l'override, si sta ancora attuando un un'interfaccia si fa parte di. Nel fare ciò, si assume tutto ciò che viene fornito con il suo contratto successivo. Ti costringe a implementare consapevolmente il metodo clone() rendendo esplicito il comportamento.

+0

Molto interessante - grazie! Il collegamento – IAmYourFaja

+0

non funziona più – marcospgp

0

a) La clonazione invoca il modo extralinguistico di costruire oggetti - senza costruttori.

b) La clonazione richiede di trattare in qualche modo con CloneNotSupportedException - o di disturbare il codice client per trattarlo.

c) I vantaggi sono piccoli: non è necessario scrivere manualmente un costruttore di copie. Quindi, usa Cloneable judiosly. Non ti offre vantaggi sufficienti rispetto allo sforzo che devi applicare per fare tutto bene.

About Java cloneable