Vários métodos de copiar objetos java

Recentemente, as empresas precisam copiar objetos, mas eu não quero obter e definir um por um, então encontrei três métodos para copiar objetos online.
Uma cópia rasa.
1. A classe que precisa ser copiada implementa a interface Cloneable;
2. Sobrescreve o método clone ();
import java.lang.Cloneable ;;

classe 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;
	
}

}
Segunda cópia em profundidade.
Na cópia superficial, apenas variáveis-membro do tipo value, para tipos de referência, copiam o endereço do objeto de referência para o objeto clone, ou seja, as variáveis-membro do objeto protótipo e do objeto clone apontam para o mesmo endereço de memória. Dessa maneira, o valor de referência do objeto copiado é modificado, e o valor do objeto original também será alterado, o que está obviamente errado.
Existem duas soluções: uma é definir o tipo de referência da variável para o objeto clone; a segunda é implementar diretamente a serialização, executar operações de E / S no objeto e ler / gravar. Pode-se imaginar que esse método é mais problemático.
Terceiro, a classe de ferramenta BeanUtils e PropertyUtils para replicação de objetos
Se é para implementar o método clone () ou operação de E / S, é mais problemático e o código é demais.Neste momento, você pode usar a classe de ferramenta java para obtê-lo em uma linha.
A principal diferença entre o BeanUtils e o PropertyUtils é que o BeanUtils fornece a função de conversão de tipos, ou seja, quando se descobre que dois JavaBeans com o mesmo atributo de nome são tipos diferentes, a conversão é realizada dentro do intervalo de tipos de dados suportados, mas o PropertyUtils não suporta essa função. Como não é suportado, a velocidade será mais rápida. No desenvolvimento real, o BeanUtils é mais comumente usado e o risco de cometer erros é menor.

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

Observe que se você deseja copiar objetos em um loop, não deve gravar a instrução do novo novo objeto fora do loop, caso contrário, cada novo valor será um endereço de referência.

Publicado 6 artigos originais · gostei 0 · visitas 354

Acho que você gosta

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