Javaでのクローン作成とそのタイプとは何ですか?



Javaでのクローン作成に関するこの記事では、クローン作成プロセスと、Javaでサポートされているさまざまなタイプのクローン作成について詳しく説明します。

プログラミング中に、コード全体を再利用する必要があるシナリオに遭遇することがよくあります。コードを書き直すと、プログラムがかさばりますが、プログラムの効率は低下します。したがって、Javaは、この厄介なタスクから救済する優れた機能を提供します。これはJavaでのクローン作成として知られており、この記事の媒体を通して、完全な洞察を提供します。

Javaでのxmlファイルの解析

以下は、この記事で説明するトピックです。





Javaでのクローン作成

Javaでのオブジェクトのクローン作成は、元のオブジェクトの正確なコピーを作成するプロセスです。つまり、元のオブジェクトからすべてのデータと属性をコピーして、新しいオブジェクトを作成する方法です。これは、のclone()メソッドを実装することによってのみ可能です。 java.lang.Object クラス。 cloneメソッドは、それがあったオブジェクトの正確なコピーを作成しますフィールドごとの割り当て順序で呼び出され、新しいオブジェクト参照を返します 覚えておかなければならないことの1つは、Javaでは、マーカーインターフェイスであるクローンインターフェイスを実装するオブジェクトがclone()を使用できることです。

Javaでのクローン作成について理解したところで、この機能を使用することのさまざまな利点を見てみましょう。



Javaでのクローン作成の利点

以下に、Javaでクローンを使用する際の最も興味深い機能のいくつかをリストしました。

  • コードの行を減らすのに役立ちます。
  • コピーの最も効果的かつ効率的な方法オブジェクト。
  • また、clone()は、配列をコピーするための最速のメソッドであると考えられています。

注:クローンを使用すると、設計上の問題が発生する可能性がありますが、適切な戦略的な方法で使用すると、メリットが得られます。

Javaでのクローン作成の種類

Javaでのクローン作成はグループ化できます2つのカテゴリに:



  1. 浅いクローニング
  2. ディープクローニング

それぞれを一つ一つ理解していきましょう。

浅いクローニング

Javaでは、clone()メソッドを呼び出してクローン作成プロセスを実行すると、浅いクローン作成と呼ばれます。これはJavaのデフォルトのクローン作成プロセスであり、元のオブジェクトの浅いコピーが正確なフィールドで作成されます。元のオブジェクトにフィールドとして他のオブジェクトへの参照がある場合、新しいオブジェクトの作成ではなく、そのオブジェクトの参照のみが複製されます。つまり、複製されたオブジェクトの値を変更すると、元のオブジェクトにも反映されます。したがって、浅いクローン作成は元のオブジェクトに依存します。

浅いコピー-Javaでのクローニング-Edureka以下に同じ例を示します。

パッケージedurekaクラスEduCourse {文字列course1文字列course2文字列course3public EduCourse(String crs1、String crs2、String crs3){this.course1 = crs1 this.course2 = crs2 this.course3 = crs3}}クラスEduLearnerはCloneable {int eduId StringlearnerNameを実装しますEduCourse eduCourse public EduLearner(int eduId、String learnerName、EduCourse eduCourse){this.eduId = eduId this.learnerName = learnerName this.eduCourse = eduCourse} //デフォルトバージョンのclone()メソッドprotected Object clone()throws CloneNotSupported .clone()}} public class ShallowCloneSample {public static void main(String [] args){EduCourse j2ee = new EduCourse( 'Java'、 'Spring'、 'Microservices')EduLearner learner1 = new EduLearner(2811、 'Max' 、j2ee)EduLearner learner2 = null tr​​y {// learner1のクローンを作成してlearner2に割り当てるlearner2 =(EduLearner)learner1.clone()} catch(CloneNotSupportedException e){e.printStackTrace()} // Learner1の詳細を出力するSystem.out.p rintln( 'Learner 2の詳細:')System.out.println( 'Id:' + learner1.eduId)System.out.println( 'Name:' + learner1.learnerName)System.out.println( 'コースID: '+ learner1.eduCourse)//' learner1 'のすべてのコースを印刷しますSystem.out.println(' Courses of Learner 1: ')System.out.println(learner1.eduCourse.course1)System.out.println(learner1。 eduCourse.course2)System.out.println(learner1.eduCourse.course3)// Learner2の詳細の印刷System.out.println( 'Learner 2の詳細:')System.out.println( 'Id:' + learner2.eduId )System.out.println( 'Name:' + learner2.learnerName)System.out.println( 'Course Id:' + learner2.eduCourse)// 'learner2'のすべてのコースを印刷しますSystem.out.println( 'Courses of Learner 2: ')System.out.println(learner2.eduCourse.course1)System.out.println(learner2.eduCourse.course2)System.out.println(learner2.eduCourse.course3)//' learner2のcourse3を変更する'learner2.eduCourse.course3 =' JSP '//この変更は元の' learner1 'System.out.println('学習者2の更新されたコース: ')System.out.println(learner1.eduCourse.course1)System.out.println(learner1.eduCourse.course2)System.out.println(learner1.eduCourse.course3)}}

出力:

学習者2の詳細:ID:2811名前:最大コースID:EduCourse @ 15db9742学習者1のコース:Java Springマイクロサービス学習者2の詳細:ID:2811名前:最大コースID:EduCourse @ 15db9742学習者のコース2:JavaSpringマイクロサービス学習者2の更新されたコース:Java Spring JSP

Javaでのディープクローニング

Javaでは、クローン作成プロセスがCloneableインターフェースを実装することによって実行される場合、それはディープクローン作成と呼ばれます。このタイプのクローン作成では、元のオブジェクトのすべてのフィールドの正確なコピーが作成されます。ただし、元のオブジェクトにフィールドとして他のオブジェクトへの参照がある場合は、clone()メソッドを呼び出すことによってそれらのオブジェクトのコピーも作成されます。これにより、複製されたオブジェクトが元のオブジェクトから独立し、いずれかのオブジェクトに加えられた変更が他のオブジェクトに反映されなくなります。

以下に同じ例を示します。

パッケージedurekaクラスEduCourseはCloneableを実装します{文字列course1文字列course2文字列course3public EduCourse(String crs1、String crs2、String crs3){this.course1 = crs1 this.course2 = crs2 this.course3 = crs3} protected Object clone()throws CloneNotSupportedException { return super.clone()}}クラスEduLearnerはCloneableを実装します{int eduId String learnerName EduCourse eduCourse public EduLearner(int eduId、String learnerName、EduCourse eduCourse){this.eduId = eduId this.learnerName = learnerName this.eduオブジェクトで保護されたオブジェクトのディープコピーを作成するためのclone()メソッドのオーバーライドObject clone()throws CloneNotSupportedException {EduLearner learner =(EduLearner)super.clone()learner.eduCourse =(EduCourse)eduCourse.clone()return learner}} public class DeepCloneSample {public static void main(String [] args){EduCourse j2ee = new EduCourse( 'Java'、 'Spring'、 'Microservices')EduLearner learner1 = new EduLearner(2811、 'Max'、j2ee)EduLearner learn er2 = null tr​​y {// learner1のクローンを作成してlearner2に割り当てるlearner2 =(EduLearner)learner1.clone()} catch(CloneNotSupportedException e){e.printStackTrace()} // Learner1System.outの詳細を出力します。 println( '学習者の詳細2:')System.out.println( 'Id:' + learner1.eduId)System.out.println( 'Name:' + learner1.learnerName)System.out.println( 'コースID: '+ learner1.eduCourse)//' learner1 'のすべてのコースを印刷しますSystem.out.println(' Courses of Learner 1: ')System.out.println(learner1.eduCourse.course1)System.out.println(learner1。 eduCourse.course2)System.out.println(learner1.eduCourse.course3)// Learner2の詳細の印刷System.out.println( 'Learner 2の詳細:')System.out.println( 'Id:' + learner2.eduId )System.out.println( 'Name:' + learner2.learnerName)System.out.println( 'Course Id:' + learner2.eduCourse)// 'learner2'のすべてのコースを印刷しますSystem.out.println( 'Courses学習者2の: ')System.out.println(learner2.eduCourse.course1)System.out.printl n(learner2.eduCourse.course2)System.out.println(learner2.eduCourse.course3)// 'learner2'のコース3を変更するlearner2.eduCourse.course3 = 'JSP' //この変更は元の 'に反映されませんlearner1'System.out.println( 'コースオブラーナー1:')System.out.println(learner1.eduCourse.course1)System.out.println(learner1.eduCourse.course2)System.out.println(learner1.eduCourse。 course3)// learner2の更新されたコースSystem.out.println( 'Courses of Learner 2:')System.out.println(learner2.eduCourse.course1)System.out.println(learner2.eduCourse.course2)System.out。 println(learner2.eduCourse.course3)}}

出力:

学習者2の詳細:ID:2811名前:最大コースID:edureka.EduCourse@15db9742学習者1のコース:Java Spring Microservices学習者2の詳細:ID:2811名前:最大コースID:edureka.EduCourse@6d06d69c学習者2のコース:学習者のJava Springマイクロサービスコース1:学習者のJava Springマイクロサービスコース2:Java Spring JSP

これで、Javaでのクローン作成に関するこの記事は終わりです。 Javaについて詳しく知りたい場合は、 。

Javaでのクローン作成とは何かを理解したので、 25万人以上の満足した学習者のネットワークを持つ信頼できるオンライン学習会社であるEdurekaが世界中に広がっています。 EdurekaのJavaJ2EEおよびSOAトレーニングおよび認定コースは、Java開発者になりたい学生および専門家向けに設計されています。このコースは、Javaプログラミングをすぐに開始できるように設計されており、HibernateやSpringなどのさまざまなJavaフレームワークに加えて、コアと高度なJavaの両方の概念についてトレーニングします。

質問がありますか?この「Javaでのクローン作成」の記事のコメントセクションにその旨を記載してください。できるだけ早くご連絡いたします。