logo

Java でのオブジェクトのクローン作成

Javaのコンストラクターオブジェクトのクローン作成 オブジェクトの正確なコピーを作成する方法です。オブジェクトのクローンを作成するには、Object クラスの clone() メソッドを使用します。

java.lang.Cloneable インターフェース オブジェクト クローンを作成するクラスによって実装する必要があります。 Cloneable インターフェースを実装しない場合、 clone() メソッドは CloneNotSupportedException

clone() メソッド オブジェクトクラスで定義されています。 clone() メソッドの構文は次のとおりです。

Java文字列の書式設定
 protected Object clone() throws CloneNotSupportedException 

clone() メソッドを使用する理由

clone() メソッド オブジェクトの正確なコピーを作成するための追加の処理タスクを節約できます。 new キーワードを使用して実行すると、実行に多くの処理時間がかかるため、オブジェクトのクローン作成を使用します。

オブジェクトのクローン作成の利点

Object.clone() には設計上の問題がいくつかありますが、オブジェクトをコピーする簡単な方法として依然として人気があります。以下は、 clone() メソッドを使用する利点のリストです。

  • 長くて繰り返しのコードを記述する必要はありません。 4 行または 5 行の clone() メソッドを持つ抽象クラスを使用するだけです。
  • これは、特にすでに開発されているプロジェクトや古いプロジェクトに適用する場合、オブジェクトをコピーするための最も簡単で効率的な方法です。親クラスを定義し、その中で Cloneable を実装し、 clone() メソッドの定義を提供するだけでタスクは完了します。
  • Clone() は配列をコピーする最も速い方法です。

オブジェクトのクローン作成の欠点

以下は、 clone() メソッドのいくつかの欠点のリストです。

文字列比較
  • Object.clone() メソッドを使用するには、Cloneable インターフェイスの実装、 clone() メソッドの定義、CloneNotSupportedException の処理、最後に Object.clone() の呼び出しなど、コードの多くの構文を変更する必要があります。
  • メソッドが含まれていない状態でクローン可能なインターフェイスを実装する必要があります。これを使用して、オブジェクトに対して clone() を実行できることを JVM に伝えるだけです。
  • Object.clone() は保護されているため、独自の clone() を提供し、そこから間接的に Object.clone() を呼び出す必要があります。
  • Object.clone() はコンストラクターを呼び出さないため、オブジェクトの構築を制御できません。
  • 子クラスに clone メソッドを記述したい場合は、そのすべてのスーパークラスで clone() メソッドを定義するか、別の親クラスから継承する必要があります。そうしないと、super.clone() チェーンが失敗します。
  • Object.clone() は浅いコピーのみをサポートしますが、深いクローン作成が必要な場合はオーバーライドする必要があります。

clone() メソッドの例 (オブジェクトの複製)

オブジェクトのクローン作成の簡単な例を見てみましょう

 class Student18 implements Cloneable{ int rollno; String name; Student18(int rollno,String name){ this.rollno=rollno; this.name=name; } public Object clone()throws CloneNotSupportedException{ return super.clone(); } public static void main(String args[]){ try{ Student18 s1=new Student18(101,'amit'); Student18 s2=(Student18)s1.clone(); System.out.println(s1.rollno+' '+s1.name); System.out.println(s2.rollno+' '+s2.name); }catch(CloneNotSupportedException c){} } } 
今すぐテストしてください
 Output:101 amit 101 amit 
オブジェクトのクローン作成の例をダウンロードする

上の例でわかるように、両方の参照変数は同じ値を持ちます。したがって、 clone() はオブジェクトの値を別のオブジェクトにコピーします。したがって、オブジェクトの値を別のオブジェクトにコピーするために明示的なコードを記述する必要はありません。

new キーワードで別のオブジェクトを作成し、このオブジェクトに別のオブジェクトの値を代入すると、このオブジェクトに対して多くの処理が必要になります。したがって、余分な処理タスクを保存するには、 clone() メソッドを使用します。