Ver Mensaje Individual
  #7 (permalink)  
Antiguo 05/10/2010, 05:50
porito
 
Fecha de Ingreso: junio-2010
Mensajes: 44
Antigüedad: 13 años, 10 meses
Puntos: 0
Respuesta: problema al tener dos arrays iguales

Cita:
Iniciado por Xerelo Ver Mensaje
Cuando pasas un ArrayList(objeto) a un método, sea o no de la misma clase, lo que realmente le pasas es una referencia al objeto.

Por lo tanto, si quieres tratar ese objeto sin que afecte al original necesitas crear otro objeto. Puedes pasarle como parámetro la lista clonada, o pasarle el original y crear la nueva lista en el método.

Si utilizas clone(), tendrás una copia del arrayList, si usas toArray(), creas un nuevo objeto de tipo array, no de arrayList. En cualquier caso, ninguno será el objeto original, por lo que puedes modificarlo. Eso sí, si creas el clon en el método, una vez que salgas del método perderás los cambios en la copia, a menos que lo devuelvas con un return y se lo asignes a la referencia original o a otra referencia que hayas creado.

Tienes que diferenciar entre modificar el contenido del array, y modificar los objetos contenidos en un array. Si eliminas o añades un objeto en la lista copia, en el original seguirán existiendo los mismos objetos que al principio, pero si modificas un objeto Persona, entonces se te modifica en la copia y en el original.

Recuerda, ArrayList es un array dinámico, toArray() genera un array estático, no son el mismo tipo de objeto.
Perdon que sea tan pesado pero como dice el refran: "prefiero ser tonto 5 minutos que toda la vida"

Lo del toArray lo descarto porque quiero que siga siendo ArrayList.
Me da igual como quede el arrayList copia cuando salga del metodo.

Yo solo quiero un arrayList exactamente igual que el original, para hacer los trapicheos que quiera sin que se vea moficiado el origianl, ya que el original lo usarare en la clase padre para otras cosas. Por eso quiero hacer una copia en la ventana hija y ahi hacer lo que sea con esa copia.

entonces una solucion seria, hacer el .clone() del original en la ventana padre, y esa clonacion que se llamara copia pasarla en el constructor a la clase hija no? Luego lo de la clase hija lo haria igual que lo tengo ahora, pero me da igual que sea referencia y se modifique la clonada, porque con tal de que no me modifique la original.... no?

Es una solucion no? O pasarle directamente la original en el constructor y una vez la tengo en la clase hija, hacer ahi la clonacion,....