Varios métodos para copiar objetos en Java

Recientemente, las empresas tienen que copiar objetos, pero no quiero obtenerlos y configurarlos uno por uno, así que encontré tres métodos para copiar objetos en línea.
Uno, copia superficial.
1. La clase que necesita ser copiada implementa la interfaz Cloneable;
2. Sobrescribe el método clone ();
import java.lang.Cloneable ;;

La clase pública OrderVO implementa Cloneable {

private int orderID;

private int userID;

private double orderAmount;

public int getOrderID() {
	return orderID;
}

public void setOrderID(int orderID) {
	this.orderID = orderID;
}

public int getUserID() {
	return userID;
}

public void setUserID(int userID) {
	this.userID = userID;
}

public double getOrderAmount() {
	return orderAmount;
}

public void setOrderAmount(double orderAmount) {
	this.orderAmount = orderAmount;
}

@Override
public Object clone() {
	OrderVO vo = null;
	try {
	vo = (OrderVO) this.clone();
	} catch (Exception e) {
		e.printStackTrace();
	}
	return vo;
	
}

}
Segundo, copia profunda.
En la copia superficial, solo las variables miembro del tipo de valor, para los tipos de referencia, copie la dirección del objeto de referencia al objeto clonado, es decir, las variables miembro del objeto prototipo y el objeto clonado apuntan a la misma dirección de memoria. De esta manera, el valor de referencia del objeto copiado se modifica, y el valor del objeto original también cambiará, lo que por supuesto es incorrecto.
Hay dos soluciones, una es establecer el tipo de referencia de la variable para el objeto de clonación; la segunda es implementar directamente la serialización, realizar operaciones de E / S en el objeto y leer / escribir. Uno puede imaginar que el método uno es más problemático.
En tercer lugar, la clase de herramienta BeanUtils y PropertyUtils para la replicación de objetos
Ya sea para implementar el método clone () o la operación IO, es más problemático y el código es demasiado. En este momento, puede usar la clase de herramienta java para obtenerlo en una línea.
La principal diferencia entre BeanUtils y PropertyUtils es que BeanUtils proporciona la función de conversión de tipos, es decir, cuando se descubre que dos JavaBeans con el mismo atributo de nombre son tipos diferentes, la conversión se realiza dentro del rango de tipos de datos admitidos, pero PropertyUtils no admite esta función. Como no es compatible, la velocidad será más rápida. En el desarrollo real, BeanUtils se usa más comúnmente y el riesgo de cometer errores es menor.

    OrderVO vo1 = new OrderVO(); // 原对象
	OrderVO vo2 = new OrderVO(); // 目标对象
	try {
		BeanUtils.copyProperties(vo2, vo1);
	} catch (Exception e) {
		e.printStackTrace();
	}

Tenga en cuenta que si desea copiar objetos en un bucle, no debe escribir la declaración del nuevo objeto nuevo fuera del bucle; de ​​lo contrario, cada nuevo valor es una dirección de referencia.

Publicado 6 artículos originales · me gusta 0 · visitas 354

Supongo que te gusta

Origin blog.csdn.net/weixin_44863376/article/details/105453562
Recomendado
Clasificación