1

私のフレームワークは、あらゆるクラスのドメイン オブジェクトを処理します。fooそのようなドメインオブジェクトインスタンスを実装したかのように(実装Cloneableしていない)浅いクローンを作成できる必要がありObject.clone()、浅いクローンを返すそれを呼び出しました。

動作しないもの:

  • foo のクラスに実装Cloneableを強制し、そのために public メソッドを実装しますclone()
  • リフレクションを介して foo.clone() を呼び出します (保護されたメソッドに到達するためObject.clone())。のクラスが実装されていないCloneNotSupportedExceptionため、スローされます。fooCloneable
  • foo のシリアル化と逆シリアル化: ディープ コピーではなく、浅いコピーが必要です。

制限:

  • fooのクラスはコンパイル時にわかりません。
  • fooゲッター/セッターとして公開されていないフィールドがある可能性があります。

注: 同様の質問がいくつかありますが、浅いクローンの取得に焦点を当てているものはありません。

4

2 に答える 2

3

BeanUtilsは、setter/getter がある限り、複製不可能な Bean を複製できます。残念ながら、Orika Bean マッパーはプライベート フィールドのマッピングもサポートしていません。

最終的には、Bean マッピング用のほとんどのライブラリがディープ コピーを実行しようとし、いくつかの特別な要件 (サポートプライベート フィールドのコピー用)。

于 2012-11-30T15:54:57.093 に答える
0
class A{
    private int a;
    private int[] b;


    public int getA() {
        return a;
    }
    public void setA(int a) {
        this.a = a;
    }
    public int[] getB() {
        return b;
    }
    public void setB(int[] b) {
        this.b = b;
    }

    public static A shallowCopyOf(A instanceOfA){ //performs shallow copy
        A newInstance  = new A();
        newInstance.setA(instanceOfA.getA());
        newInstance.setB(instanceOfA.getB());
        return newInstance;
    }
}
于 2012-11-30T14:46:21.963 に答える