|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Aug 2008
Messaggi: 308
|
[JAVA] clonare vector
Salve, vorrei clonare un vector di oggetti utilizzando soltanto il metodo clone direttamente sul vector (se è possibile!). Questo codice non funziona
Codice:
import java.awt.Point;
import java.util.Vector;
public class Main {
public static void main(String[] args) {
MyPoint p1 = new MyPoint(1, 2);
MyPoint p2 = new MyPoint(2, 2);
MyPoint p3 = new MyPoint(3, 3);
Vector<MyPoint> points = new Vector<MyPoint>();
points.add(p1);
points.add(p2);
points.add(p3);
Vector<MyPoint> cloned = (Vector<MyPoint>) points.clone();
points.elementAt(0).setLocation(4, 4);
System.out.println(cloned.elementAt(0));
}
}
class MyPoint extends Point implements Cloneable {
private static final long serialVersionUID = 1L;
public MyPoint(int x, int y) {
super(x, y);
}
public Object clone() {
return super.clone();
}
}
|
|
|
|
|
|
#2 |
|
Member
Iscritto dal: Sep 2008
Città: Milano
Messaggi: 126
|
se non erro il metodo clone() di vector non effettua una copia profonda. credo proprio che tu debba clonare tutti gli oggetti contenuti nel vector uno a uno.
ciao! british |
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Jan 2007
Città: Roma
Messaggi: 828
|
Effettivamente dev'essere così.
Però, d'altro canto, guardando sulla API(cliccami) dice testualmente: "Returns a clone of this vector. The copy will contain a reference to a clone of the internal data array, not a reference to the original internal data array of this Vector object." Quindi non ho proprio idea del perché! Idomeneo
__________________
Le trattative concluse sul mercatino: dubmehard (1),ZioLollo (1),masao (1),DIDDLEKRI(1), Frycap (1), LightIntoDarkness (1),pingu79 (1) |
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
|
Prova a definire il metodo clone di MyPoint così:
Codice:
public Object clone() {
return new MyPoint(this.x, this.y);
}
__________________
As long as you are basically literate in programming, you should be able to express any logical relationship you understand. If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it. (Chris Crawford) |
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: Aug 2008
Messaggi: 308
|
|
|
|
|
|
|
#6 |
|
Senior Member
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
|
Ok, niente da fare, chiamare clone() non ti farà mai ottenere una deep copy degli oggetti contenuti nel tuo Vector, ma solo una shallow copy.
Non hai molte alternative se non creare un nuovo Vector e copiare(clonare) ogni singolo elemento. Forse può interessarti questa spiegazione. Qui poi c'è un altro articolo al riguardo.
__________________
As long as you are basically literate in programming, you should be able to express any logical relationship you understand. If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it. (Chris Crawford) |
|
|
|
|
|
#7 | |
|
Senior Member
Iscritto dal: Jan 2007
Città: Roma
Messaggi: 828
|
Quote:
Per sfizio ho provato ad inserire nel main del codice Codice:
if (cloned.elementAt(0) == points.elementAt(0) )
System.out.println("YES");
Oggi ho imparato una cosa nuova, non mi posso fidare completamente neanche delle API! Grazie blackstop Idomeneo
__________________
Le trattative concluse sul mercatino: dubmehard (1),ZioLollo (1),masao (1),DIDDLEKRI(1), Frycap (1), LightIntoDarkness (1),pingu79 (1) Ultima modifica di Idomeneo : 22-09-2008 alle 17:52. |
|
|
|
|
|
|
#8 | |
|
Senior Member
Iscritto dal: Jan 2000
Città: Torino-Taranto
Messaggi: 1166
|
Quote:
Perchè puoi così trattare separatemente i due vettori, cancellare un elemento da uno e mantenere l'altro intatto ad esempio.
__________________
Esiste un virus in ambiente GNU/Linux ed è la licenza GPL. |
|
|
|
|
|
|
#9 | |
|
Senior Member
Iscritto dal: Jan 2007
Città: Roma
Messaggi: 828
|
Quote:
Idomeneo
__________________
Le trattative concluse sul mercatino: dubmehard (1),ZioLollo (1),masao (1),DIDDLEKRI(1), Frycap (1), LightIntoDarkness (1),pingu79 (1) |
|
|
|
|
|
|
#10 | |
|
Senior Member
Iscritto dal: Aug 2008
Messaggi: 308
|
Quote:
|
|
|
|
|
|
|
#11 | |
|
Senior Member
Iscritto dal: Aug 2008
Messaggi: 308
|
Quote:
|
|
|
|
|
|
|
#12 |
|
Senior Member
Iscritto dal: Aug 2008
Messaggi: 308
|
Ah no no mi sbaglio, c'è un "array data" di troppo
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 00:06.




















