Java - Clonar, clone(), un array de objetos.

 
Vista:

Clonar, clone(), un array de objetos.

Publicado por Perico (1 intervención) el 09/11/2011 20:34:16
Hola.

Estoy intentando hacer un método clone() de un array bidimensional (una matriz de toda la vida) que contiene objetos pero me da problema de "Aliasing".

¿Sería esto correcto?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
@Override
	public Matrix clone(){
 
		Matrix copia = null;
		try {
			copia = (Matrix) super.clone();
			copia.matriz = Arrays.copyOf(this.matriz, this.matriz.length);
 
			for(int x = 0 ; x < dimensionX ; x++){
				for (int y = 0 ; y < dimensionY ; y++){
					copia.matriz[x][y] =  this.matriz[x][y].clone();
				}
			}
 
		} catch (CloneNotSupportedException e) {
			e.printStackTrace();
		}
 
		return copia;
	}





this.matriz[x][y].clone() es una llamada al clone() de los objetos que contiene la matriz en cada posición.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil

Clonar, clone(), un array de objetos.

Publicado por Edgar Ricardo (5 intervenciones) el 05/03/2014 00:56:33
Que primero que na... clone en Object devuelve un Object así que no puedes devolver Matrix
no se de que clase de array es copia.matriz, pero yo diria sin ser todo un experto que no
has creado el objeto copia.matriz luego a donde va a copiar el ArrayCopy.

Luego si el array es de tipos básicos no hay problema pero si contiene otros objetos
debes clonarlos de uno en uno... yo creo... en realidad estoy tratando de averiguar si
puedo ahorrarme toda esa vuelta
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Clonar, clone(), un array de objetos.

Publicado por Edgar Ricardo (5 intervenciones) el 05/03/2014 16:20:17
Pues fijate... que si se puede simplificar un poco... al menos para el caso
de datos simples como int...
fijate en el campo x... esto es un ejemplo que encontre en esta dirección
http://www.sc.ehu.es/sbweb/fisica/cursoJava/fundamentos/clonico/clonico2.htm

public class Lista implements Cloneable{
private int[] x;
public int n;
public String nombre;
//...
}


public Object clone(){
Lista obj=null;
try{
obj=(Lista)super.clone();
}catch(CloneNotSupportedException ex){
System.out.println(" no se puede duplicar");
}
obj.x=(int[])obj.x.clone();
return obj;
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar