Domanda

Perché non è stato specificato il metodo .clone() nell'interfaccia java.lang.Cloneable?

È stato utile?

Soluzione

In sostanza, si tratta di un'interfaccia rotto. Ken Arnold e Bill Venners discussi in Java problemi di progettazione .

Arnold:

  

Se dovessi essere Dio, a questo punto, e molte persone sono probabilmente contento io non sono, direi deprecate Cloneable e hanno un Copyable, perché Cloneable ha problemi. Oltre al fatto che è scritto male, Cloneable non contiene il metodo clone. Ciò significa che non è possibile verificare se qualcosa è un'istanza di Cloneable, lanci di Cloneable, e richiama clone. Devi usare di nuovo la riflessione, che è terribile. Questo è solo un problema, ma uno mi piacerebbe sicuramente risolvere.

Altri suggerimenti

Vedere questo bug nel database di bug Java:

http://bugs.sun.com/bugdatabase/view_bug.do? bug_id = 4098033

In sostanza, si tratta di un difetto di progettazione nelle versioni precedenti di Java che non hanno intenzione di risolvere nell'interfaccia Cloneable per farlo sarebbe rompere la compatibilità con il codice esistente.

In Java, c'è questo concetto di interfaccia marcatori. L'interfaccia Cloneable non ha metodi o campi e serve solo ad identificare la semantica di essere clonabile.

dev-x sito:

  

Spesso ci si imbatte in interfacce in Java che non hanno un comportamento. In altre parole, sono solo definizioni vuote interfaccia. Questi sono conosciuti come interfacce marcatori. Alcuni esempi di interfacce marcatore nella Java API includono:

     

Il progetto su cui lavoro, abbiamo creato un'interfaccia chiamata PublicCloneable, contiene il metodo clone e specifica che è pubblico.

Trovo che questo sia un utile: il fatto che c'è un metodo clone, ma non è possibile accedere non aiuta molto

.
public interface PublicCloneable extends Cloneable {
    public Object clone();
}

Dato che il metodo clone è implementato nella classe Object a causa della sua condizione di "speciale":. La copia della memoria di oggetti di qualsiasi tipo

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top