ragazzi non ho capito come funziona bene la clonazione in Java.
Potete farmi degli esempi di classi derivate che implementano l'interfaccia clonazione, e una classe singola che implementa l'intefaccia clonazione?
ragazzi non ho capito come funziona bene la clonazione in Java.
Potete farmi degli esempi di classi derivate che implementano l'interfaccia clonazione, e una classe singola che implementa l'intefaccia clonazione?
C/C++
Esempio di una classe che implementa Cloneable:
Esempio di classe derivata:codice:public class MiaClasse implements Cloneable { private int mioDato; public MiaClasse() { mioDato = 0; } public MiaClasse(int mioDato) { this.mioDato = mioDato; } public synchronized void clone() { MiaClasse mc = new MiaClasse(mioDato); return mc; } }
Ciao.codice:public class MiaClasse2 extends MiaClasse { private int secondoDato; public MiaClasse2() { super(); secondoDato = 0; } public MiaClasse2(int secondoDato) { super(secondoDato); this.secondoDato = secondoDato; } public void setDato(int secondoDato) { this.secondoDato = secondoDato; } public synchronized void clone() { MiaClasse2 mc2 = null; try { mc2 = (MiaClasse2) super.clone(); mc2.setDato(secondoDato); } catch (CloneNotSupportedException cnse) { // Non dovrebbe mai succedere perchè implemento Cloneable cnse.printStackTrace(); } return mc2; } }
"Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza
invece di synchronized non va Object?
Un altra cosa se una classe derivata implementa la clonazione immediatamente anche la classe base la deve implementare?
Grazie!
C/C++
ho scritto una scemenza invece di sinchronized void non va solo Object?
C/C++
In Java tutte le classi sono derivate. Quindi la risposta dovrebbe essere no...Un altra cosa se una classe derivata implementa la clonazione immediatamente anche la classe base la deve implementare?
Folle e' l'uomo che parla alla luna.
Stolto chi non le presta ascolto.
dovrebbe? vorrei una risposta sicura
C/C++
Beh, ti conviene che la superclasse sia clonabile, in modo sa poter invocare super.clone() come nell'esempio di LeleFT
In caso contrario, nella classe derivata dovresti prevedere anche del codice per clonare la parte di dati eredidata, ricordando che i membri non primitivi andrebbero a loro volta clonati...
La mia risposta era puramente accademica: Object non e' clonabile, ma ovviamente (che io sappia) non ha nulla da clonare.
Folle e' l'uomo che parla alla luna.
Stolto chi non le presta ascolto.
La scemenza l'ho scritta io. Il metodo andrebbe con la seguente firma:Originariamente inviato da C232
ho scritto una scemenza invece di sinchronized void non va solo Object?
la parola chiave synchronized ti permette di implementare automaticamente la sincronizzazione nel caso la classe sia condivisa da più thread che hanno bisogno di utilizzare il metodo clone(). Ovviamente non è obbligatorio sincronizzarlo.codice:public synchronized Object clone() {...}
Ciao.
"Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza