PDA

Visualizza la versione completa : [JAVA] Clonare un oggetto


var
11-03-2006, 19:06
salve a tutti,

ho la necessita' di clonare un oggetto istanza di una classe che contiene attributi composti da oggetti.
non me la cavo utilizzando clone di Object, vero? lo devo ridefinire? se si', come?
inoltre, e' necessario che gli oggetti-attributo della classe dell'oggetto da clonare implementino anch'essi Cloneable?

grazie a tutti. :)

perzem
11-03-2006, 20:48
al primo corso di programmazione avevamo implementato una pila e per farne una copia abbiamo reimplementato la clone in questo modo.
Magari ti torna utile.

La classe V(int s) costruisce una pila. in pratica viene costruito un oggetto temporaneo che viene riempito con l'originale


class V implements Clonable {
int x[];V(int s){…}public String toString(){…}
public Object clone(){
Object tmp=null; //l'oggetto che creero'
try {
tmp=super.clone(); //copia di base
} catch (CloneNotSupportedException e) {
e.printStackTrace(); return null;
}
((V)tmp).x=new int[x.length]; //adattamento
for (int k=0;k<x.length;k++)((V)tmp).x[k]=x[k];
return tmp;
}}

poi la richiamo così

V p1=new V(5);
V p2=p1.clone();

var
11-03-2006, 22:46
ti ringrazio per il tuo esempio, perzem. :)
ma come dovrei comportarmi nel caso in cui avessi nella classe oggetti complessi come attributi, che magari non implementano Cloneable (nel tuo esempio vi e' solo un elemento 'complesso', il vettore x)?

grazie mille. :)

var
12-03-2006, 19:37
up

perzem
12-03-2006, 19:50
in teoria tutti gli oggetti derivano dalla classe Object e se questa implementa la funzione clone, tutti dovrebbero ereditarla...

var
12-03-2006, 19:58
Originariamente inviato da perzem
in teoria tutti gli oggetti derivano dalla classe Object e se questa implementa la funzione clone, tutti dovrebbero ereditarla...

gli oggetti che ho come attributi sono istanze di classi definite dall'utente... non credo implementino in automatico clone. :master:

perzem
12-03-2006, 22:29
l'oggetto V del mio esempio è una classe da me creata che costruisce una pila che in java nn esiste come classe di default, quindi supponendo che tu usi questo oggetto nella tua classe l'implementazione di clone va fatta sull'oggetto V (come ho fatto io)e non sulla classe che li ingloba.

Cosa intendi per oggetti complessi?

var
12-03-2006, 22:44
Originariamente inviato da perzem
Cosa intendi per oggetti complessi?

intendo oggetti che magari, a loro volta, derivano da classi che presentano attributi non primitivi.
comunque ok, credo di aver capito come procedere, anche grazie alle tue indicazioni e al tuo esempio.

grazie mille, perzem. :)

ciao

Loading