オブジェクトをコピーするJavaのいくつかのメソッド

最近、ビジネスはオブジェクトをコピーする必要がありますが、1つずつ取得および設定したくないので、オブジェクトをオンラインでコピーする3つの方法を見つけました。
1つは、浅いコピーです。
1.コピーが必要なクラスはCloneableインターフェースを実装します;
2. clone()メソッドを上書きし
ます; import java.lang.Cloneable ;;

パブリッククラスOrderVOは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;
	
}

}
第二に、深いコピー。
浅いコピーでは、参照タイプの場合、値タイプのメンバー変数のみが参照オブジェクトのアドレスをクローンオブジェクトにコピーします。つまり、プロトタイプオブジェクトとクローンオブジェクトのメンバー変数は同じメモリアドレスを指します。このようにして、コピーされたオブジェクトの参照値が変更され、元のオブジェクトの値も変更されますが、これはもちろん間違っています。
2つの解決策があります。1つは、変数の参照型をクローンオブジェクトに設定することです。2つ目は、シリアル化を直接実装し、オブジェクトに対してIO操作を実行し、読み取り/書き込みを行うことです。この方法の方が厄介だと想像できます。
3つ目は、オブジェクトレプリケーション用のツールクラスBeanUtilsおよびPropertyUtils
clone()メソッドを実装するのか、IO操作を実装するのかがさらに面倒で、コードが多すぎます。現時点では、Javaツールクラスを使用して1行で取得できます。
BeanUtilsとPropertyUtilsの主な違いは、BeanUtilsが型変換関数を提供することです。つまり、同じ名前属性を持つ2つのJavaBeansが異なる型であることが判明した場合、サポートされているデータ型の範囲内で変換が実行され、PropertyUtilsはこの関数をサポートしません。サポートされていないため、速度は速くなります。実際の開発では、BeanUtilsがより一般的に使用され、ミスをするリスクが低くなります。

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

ループ内でオブジェクトをコピーする場合は、ループの外で新しいオブジェクトのステートメントを記述しないでください。そうでない場合、新しい値はそれぞれ参照アドレスになります。

元の記事を6件公開 ・いい ね0 訪問数354

おすすめ

転載: blog.csdn.net/weixin_44863376/article/details/105453562