javaでオブジェクトをクローンの方法

オブジェクトのクローンを作成するには、JavaではインターフェースCloneableを実装し、Objectクラスのclone()メソッドをオーバーライドすれば実現できます。クローンを作成するための手順は以下の通りです。

  1. クローン化されるクラスにはCloneableインターフェースを実装する、このインターフェースは実装が必要なメソッドを持たないマーカーインターフェースである。
  2. 重写Object类的clone()方法。在方法内部使用super.clone()方法来创建对象的浅拷贝,并进行必要的深拷贝操作。
  3. clone() メソッドを使用して、クローンを作成する必要のある場所に新しいオブジェクトを作成し、それを別のオブジェクトに割り当てます。

例文コードは次のとおりです。

class MyClass implements Cloneable {
    private int value;

    public MyClass(int value) {
        this.value = value;
    }

    public void setValue(int value) {
        this.value = value;
    }

    public int getValue() {
        return value;
    }

    @Override
    protected Object clone() throws CloneNotSupportedException {
        // 调用父类的clone()方法创建浅拷贝对象
        MyClass cloned = (MyClass) super.clone();
        // 进行必要的深拷贝操作
        // e.g., cloned.setSomeField(this.someField.clone());
        return cloned;
    }
}

public class Main {
    public static void main(String[] args) {
        MyClass obj1 = new MyClass(10);
        try {
            // 克隆对象
            MyClass obj2 = (MyClass) obj1.clone();
            System.out.println(obj2.getValue()); // 输出10

            // 修改obj1的值
            obj1.setValue(20);
            System.out.println(obj1.getValue()); // 输出20
            System.out.println(obj2.getValue()); // 输出10,克隆对象的值没有改变
        } catch (CloneNotSupportedException e) {
            e.printStackTrace();
        }
    }
}

MyClassクラスは、上記例で示すようにCloneableインターフェースを実装しており、clone()メソッドがオーバーライドされています。オーバーライドしたメソッドでは、まずsuper.clone()メソッドを呼び出して、浅いコピーのオブジェクトを作成し、必要に応じてさらに深いコピー(この例では行っていません)を行った後、それを返します。メインメソッドでは、まず元オブジェクトobj1を作成し、clone()メソッドを呼び出すことでcloneオブジェクトobj2を作成しています。その後、obj1の値を変更していますが、obj2の値は変化しておらず、cloneオブジェクトが独立したオブジェクトであることがわかります。

bannerAds