logo

Клонування об'єктів в Java

конструктор на javaThe клонування об'єкта це спосіб створити точну копію об'єкта. Метод clone() класу Object використовується для клонування об’єкта.

The java.lang.Клонований інтерфейс має бути реалізовано класом, клон об’єкта якого ми хочемо створити. Якщо ми не реалізуємо інтерфейс Cloneable, генерується метод clone(). CloneNotSupportedException .

java arraylist відсортований

The метод clone(). визначається в класі Object. Синтаксис методу clone() такий:

 protected Object clone() throws CloneNotSupportedException 

Навіщо використовувати метод clone()?

The метод clone(). зберігає додаткове завдання обробки для створення точної копії об’єкта. Якщо ми виконуємо це за допомогою ключового слова new, це займе багато часу для виконання, тому ми використовуємо клонування об’єктів.

Перевага клонування об'єктів

Хоча Object.clone() має деякі проблеми з дизайном, але це все ще популярний і простий спосіб копіювання об’єктів. Нижче наведено список переваг використання методу clone():

  • Вам не потрібно писати довгі та повторювані коди. Просто використовуйте абстрактний клас із 4- або 5-рядковим довгим методом clone().
  • Це найпростіший і найефективніший спосіб копіювання об'єктів, особливо якщо ми застосовуємо його до вже розробленого або старого проекту. Просто визначте батьківський клас, реалізуйте в ньому Cloneable, надайте визначення методу clone(), і завдання буде виконано.
  • Clone() — це найшвидший спосіб скопіювати масив.

Недоліки клонування об'єктів

Нижче наведено список деяких недоліків методу clone():

  • Щоб використовувати метод Object.clone(), нам потрібно змінити багато синтаксису нашого коду, як-от реалізувати інтерфейс Cloneable, визначити метод clone() і обробити CloneNotSupportedException, і, нарешті, викликати Object.clone() тощо.
  • Ми повинні реалізувати клонований інтерфейс, поки він не містить жодних методів. Ми просто повинні використовувати його, щоб повідомити JVM, що ми можемо виконати clone() для нашого об’єкта.
  • Object.clone() захищено, тому ми повинні надати власний clone() і опосередковано викликати Object.clone() з нього.
  • Object.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() копіює значення одного об’єкта в інший. Тому нам не потрібно писати явний код, щоб скопіювати значення одного об’єкта в інший.

логотип java

Якщо ми створюємо інший об’єкт за ключовим словом new і призначаємо цьому об’єкту значення іншого об’єкта, для цього об’єкта знадобиться багато обробки. Тому, щоб заощадити додаткове завдання обробки, ми використовуємо метод clone().