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 の正確なコピーを取得できるようにしたいと考えています。
attributes
値とメソッドを持ちます。Cloneはどのようにして完成しますか?オブジェクトは、Clone を実装するとき、オブジェクトについて何も知りません。これは、単にドメイン間のコピーを実行します。これが Shallow Clone です。
変数
ではなく、新しい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) は Clonableinterface
を実装する必要があります。実装されていない場合、Clone メソッドの呼び出し時に CloneNotSupportedException がスローされます。以上がJava のシャロー クローン作成とディープ クローン作成に関連する clone() メソッドについて簡単に説明します。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。