Domanda

Se ho:

class foo implements Cloneable

e poi fare:

bar = new foo();
bar.clone();

ho una copia senza bisogno di scrivere qualsiasi bar.clone() codice come io normalmente avrebbe bisogno di fare quando ho implementare un'interfaccia.

La mia comprensione è che le funzioni di un'interfaccia devono essere compilati dalla classe che implementa, e Object.clone() non ha alcuna implementazione (come per la documentazione, "L'oggetto classe non si implementa l'interfaccia Cloneable")

Quindi da dove viene mio clone superficiale viene? Dove è il codice che implementa <=> se <=> ha alcuna implementazione? Sono confuso.

È stato utile?

Soluzione

essere molto attenti usando clone. In realtà, vorrei evitare completamente. Ho non bisogno. MA ... detto questo, il meglio discussione del tema che abbia mai letto è di Joshua Bloch, in Effective Java. Leggi Articolo 11:. "Sostituisci clone giudiziosamente"

Fatevi un favore e leggere tale elemento. Io in realtà consiglio di leggere che intero capitolo (e il resto del libro). Tutto quello che c'è da sapere sul clone e perché ti ho cautela su di esso è in là.

Spero che questo aiuti.

Altri suggerimenti

Object.clone () ha un'implementazione:

http: // java.sun.com/j2se/1.5.0/docs/api/java/lang/Object.html#clone ()

Questo legame spiega l'interfaccia Cloneable: http://java.sun.com/j2se /1.5.0/docs/api/java/lang/Cloneable.html

Un oggetto deve implementare l'interfaccia Cloneable al fine di chiamare il metodo clone (), in caso contrario, getta una CloneNotSupportedException.

Per definizione, tutte le classi in Java estendere la classe base Object, e la classe oggetto ha un valore predefinito clone () metodo, anche se oggetto stesso non implementa Cloneable. Il metodo della classe Object clone () verrà chiamato se non ignorare voi stessi.

  

Se ho: "implementa foo di classe   clonabile "

     

e poi fare: bar = new foo ();   bar.clone ();

     

ho una copia senza bisogno   scrivere alcun codice bar.clone () come ho   normalmente avrebbe bisogno di fare quando   implementare un'interfaccia.

Ciò funziona solo se si sta chiamando è all'interno della classe "foo", perché il metodo .clone () ereditato da Object è protetto.

  

La mia comprensione è che un   funzioni di interfaccia devono essere riempiti   nel dalla classe attuazione, e   Object.clone () non ha alcuna implementazione   (Come per la documentazione, "l'oggetto di classe   sè non attuare il   Interfaccia Cloneable ")

(1) Object.clone() ha un'implementazione. Fa una copia dell'oggetto se l'oggetto implementa Cloneable. (2) Il metodo .clone() non è parte di alcuna interfaccia. (3) avente un metodo clone e attuazione del <=> interfaccia sono cose completamente separati. Hai solo bisogno di implementare l'interfaccia di <=> se avete intenzione di fare uso di metodo <=> s '<=>; tuttavia, questo è il modo consigliato di scrivere un metodo <=> per la classe -. per avere la sua copia dalla superclasse di <=> metodo, che va poi fino al metodo <=> s '<=>

  

La mia comprensione è che le funzioni di un'interfaccia deve essere compilato dalla classe che implementa, e Object.clone () non ha alcuna implementazione (come per la documentazione, "L'oggetto classe non si implementa l'interfaccia Cloneable")

c'è una differenza tra il dire Object.clone () non ha alcuna implementazione e l'oggetto di classe non si implementa l'interfaccia Cloneable

metodo clone di Object ha implementazione, lo fa memoria copia dell'oggetto che ha chiamato metodo clone.

hai ragione, classe Object non implementa clonabile, tutto ciò che fa è controllare l'oggetto è clonabile o meno.

del di leggere qualche libro punto di risposta di cui sopra, penso di poter dare una soluzione rapida in modo da rispondere alla tua domanda

Allora da dove viene mio clone superficiale viene? metodo clone di Object

Dove è il codice che implementa bar.clone () se Object.clone () non ha alcuna implementazione?  ha implementazione, scritto in codice nativo.

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