2010-03-22 12 views

Respuesta

7

Desafortunadamente, no hay una manera confiable de hacer una copia profunda en un Vector de objetos.

Solo una breve reseña de lo que creo que es una "copia profunda": una copia profunda es una copia donde no solo se copian los contenidos de una colección (vector, en este caso), sino también los objetos contenidos en el Vector se copian de forma independiente. En otras palabras: si el vector V contiene A, y se hace una copia (V ') de V, una copia de A (A') en V 'no se ve afectada por ningún cambio en A y viceversa.

Normalmente, esto se implementaría mediante la "clonación" de un objeto. Desafortunadamente, si no tienes control sobre los objetos en el Vector, no tienes forma razonable de clonarlos, especialmente porque JavaME no posee una interfaz Cloneable (hasta donde pude encontrar).

Por supuesto, si controla los objetos, puede crear su propia interfaz Cloneable que especifique un método clone() que devuelva una copia completamente independiente del objeto. Luego, debe asegurarse de que su Vector de clonación especial solo acepte objetos que implementen esa interfaz. A partir de ahí, es bastante fácil (en cuanto al código) crear un Vector que pueda clonarse a sí mismo.

+0

Por desgracia, eso era lo que temía. Gracias. –

+0

Podría implementar una interfaz clonable, pero no sería tan rápido como algo nativo de J2ME. –

2

Tendrá que copiar el contenido de su Vector con un bucle.

Enumeration e = projects.elements(); 
while (e.hasMoreElements()) { 
    this.projects.addElement((Project) e.nextElement()); 
} 

Necesita más información ver página 2 The Java Forum respuesta 18, la respuesta es no.

+0

que hace una copia superficial de cada uno de los elementos. –

+0

@DanG es lo mejor que puedes obtener en J2ME, ¿Te has molestado en leer los documentos de vectores? http://en.wikipedia.org/wiki/Object_copy#Deep_vs._Shallow_vs._Lazy_copy si leo correctamente el código que he dado es una copia profunda, ya que los dos vectores son independientes. –

+0

una copia profunda completa haría copias de cada subelemento, y cada uno de esos sub-subelementos, y así sucesivamente en el árbol. En ningún punto se debe copiar una referencia de objeto; siempre una copia de cada campo. Como está copiando las referencias a objetos de los elementos, esta es una copia superficial en ese nivel. –

4

Dado que etiquetó esto como BlackBerry y no solo como J2ME, debe mencionarse que existe una clase CloneableVector que forma parte de las API de BlackBerry. Si intenta seguir el estricto J2ME, esto será de poca utilidad. Sin embargo, si solo está apuntando a BlackBerry, entonces satisface sus necesidades.

net.rim.device.api.util.CloneableVector documentation

+0

Esta es solo la versión 5.0. No hay tanto dispositivo en 5.0 en este momento. –

+0

Eso no es cierto, está en al menos 4.6 y no tengo ganas de mirar más atrás para comprobar cuándo apareció por primera vez. Me acabo de señalar el documento 5.0. – Fostah

+0

Trabajo en 4.3 ... –

Cuestiones relacionadas