Java のシャロー クローン作成とディープ クローン作成に関連する clone() メソッドについて簡単に説明します。

Y2J
リリース: 2017-05-04 10:11:07
オリジナル
2256 人が閲覧しました

Java クローン (Clone) は Java 言語の機能の 1 つであり、この記事では主に Java の Clone メカニズムがどのように機能するかを紹介します。 「Dolly」という言葉は確かに一時期非常に人気がありました。Java にもそのような概念があり、

オブジェクト

のコピーを簡単に「作成」できるようになります。Java のクローン メカニズムを詳しく見てみましょう。仕事?

1. Clone&Copy


Employee オブジェクトがあるとします。 Employee tobby =new Employee("CMTobby",5000)、通常はこのような代入が行われます。 Employee cindyelf=tobby、今回は参照、cindyelf と tobby の両方をコピーするだけです。メモリ内の同じ

オブジェクト

を指しているため、cindyelf または tobby の操作は相手に影響を与える可能性があります。
たとえば、cindyelf.raiseSalary() メソッドを通じて給与フィールドの値を変更した場合、tobby が getSalary() メソッドを通じて取得するのは給与フィールドの変更された値です。これは明らかに私たちが望んでいることではありません。見る。現時点では、お互いに影響を与えることなく tobby の正確なコピーを取得できるようにしたいと考えています。

Employee cindy=tobby.clone()、新しい Employee オブジェクトが生成され、tobby と同じ

attributes

値とメソッドを持ちます。


2. Shallow Clone&Deep Clone

Cloneはどのようにして完成しますか?オブジェクトは、Clone を実装するとき、オブジェクトについて何も知りません。これは、単にドメイン間のコピーを実行します。これが Shallow Clone です。

このようにして、Employee というフィールドを例に挙げます。これは基本型

変数

ではなく、新しい

Date 型になります。参照が生成されると、元のオブジェクトの対応するフィールドと同じ Date オブジェクトを指すため、複製されたクラスは情報の一部を元のクラスと共有することになり、これは明らかに不利なプロセスです。

現時点では、ディープ クローンを実行し、この例の hireDay などの非基本タイプのフィールドに対して特別な処理を実行する必要があります。次のコードに示すように、Clone メソッドを再定義し、hireDay で特別な処理を実行できます。

 class Employee implements Cloneable 
{ 
  public Object clone() throws CloneNotSupportedException 
  { 
   Employee cloned = (Employee) super.clone(); 
  cloned.hireDay = (Date) hireDay.clone() 
  return cloned; 
  } 
}
ログイン後にコピー

3. Clone() メソッドの保護メカニズム

Object では、Clone() が protected として宣言されています。これは、Employee

クラスを例にとると、protected として宣言することで、Employee のみが保護されることを保証できます。クラス内でのみ Employee オブジェクトを「複製」できます。原理については、パブリック、プロテクト、およびプライベートに関する以前の学習ノートを参照してください。

4. Clone() メソッドの使用方法

Clone() メソッドの使用方法は比較的簡単で、次の点に注意するだけです。 浅いクローンをいつ使用するか、いつディープ クローンを使用するかは、主に特定のオブジェクトのドメインの性質に依存します。基本的なタイプは依然として参照変数です

b. Clone() メソッドを呼び出すオブジェクトが属するクラス (Class) は Clonable

interface

を実装する必要があります。実装されていない場合、Clone メソッドの呼び出し時に CloneNotSupportedException がスローされます。

以上がJava のシャロー クローン作成とディープ クローン作成に関連する clone() メソッドについて簡単に説明します。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート