la lista de Java no puede agregar clase y luego alterar la clase original sin alterar la copia de la lista

Así que principalmente programo en C ++, y Java es muy similar a C ++. He creado un comando de lista como tal

 List<Item> stuff =new ArrayList<Item>();

donde Item es una clase personalizada que básicamente almacena datos. Recibo información de un archivo de texto y la almaceno en Item. Luego uso stuff.add para obtener la clase de elemento para rellenar. Luego uso un comando para borrar todos los datos de la clase de elemento y ver que también ha eliminado todos los datos de la lista. Básicamente quiero saber si hay una manera de agregar una copia de la clase y no la dirección de la clase en sí.

Editar: así que descubrí que reiniciar la clase de elemento también resolvió mi problema, gracias.

Respuesta 1

Desea clonar el elemento antes de agregarlo a la lista. La lista solo tiene una referencia al elemento original que creó. Como tal, cuando mutas tu artículo, el artículo en la lista también se ve afectado (es el mismo objeto).

Si desea "desconectar" el elemento que puso en su lista, puede clonarlo primero. Su clase de elemento deberá implementar Cloneabley anular el clone()método. Si solo tiene primitivas en Item, simplemente puede hacer:

public Object clone()
{
  return super.clone();
}

Si tiene otros objetos en Elemento, la operación de clonación predeterminada solo hará una copia superficial , y deberá hacer que su método de clonación sea más extenso para que haga copias profundas . Desde el Javadoc para Object.clone ():

Por convención, el objeto devuelto por este método debe ser independiente de este objeto (que se está clonando). Para lograr esta independencia, puede ser necesario modificar uno o más campos del objeto devuelto por super.clone antes de devolverlo. Típicamente, esto significa copiar cualquier objeto mutable que comprenda la "estructura profunda" interna del objeto que se está clonando y reemplazar las referencias a estos objetos con referencias a las copias. Si una clase contiene solo campos primitivos o referencias a objetos inmutables, entonces generalmente no es necesario modificar ningún campo en el objeto devuelto por super.clone.

Respuesta: 2

Soy nuevo en JSP y parece que no puedo entender cómo ejecutar el código solo cuando el usuario hace clic en el botón ... aquí está mi código: $ <form action = "list_computers.jsp" method = "post"> ...

He estado jugando un poco con documentos xml y Java un poco recientemente, pero no he tenido absolutamente ninguna suerte con la API de Google Weather. Supongamos que estoy tratando de hacer un objeto simple para almacenar el actual ...

He comenzado a diferenciar dos imágenes contando el número de píxeles diferentes usando un algoritmo simple: private int returnCountOfDifferentPixels (String pic1, String pic2) {Bitmap i1 ...

He estado atrapado en este problema durante unos meses y todavía no puedo hacerlo funcionar. ¿Cómo comienzo a comunicarme, enviar comandos e imprimir a una impresora de recibos que está conectada a través de USB?