logo

Клониране на обекти в Java

конструктор в javaThe клониране на обекти е начин за създаване на точно копие на обект. Методът clone() на клас Object се използва за клониране на обект.

The java.lang.Интерфейс за клониране трябва да се имплементира от класа, чийто обектен клонинг искаме да създадем. Ако не внедрим Cloneable интерфейс, методът clone() генерира CloneNotSupportedException .

низ n java

The метод clone(). е дефиниран в класа Object. Синтаксисът на метода clone() е както следва:

 protected Object clone() throws CloneNotSupportedException 

Защо да използвате метода clone()?

The метод clone(). спестява допълнителната задача за обработка за създаване на точно копие на обект. Ако го изпълним с помощта на ключовата дума new, ще отнеме много време за обработка, затова използваме клониране на обекти.

Предимство на клонирането на обекти

Въпреки че Object.clone() има някои проблеми с дизайна, той все още е популярен и лесен начин за копиране на обекти. Следва списък с предимствата на използването на метода clone():

  • Не е необходимо да пишете дълги и повтарящи се кодове. Просто използвайте абстрактен клас с 4- или 5-редов дълъг метод clone().
  • Това е най-лесният и ефективен начин за копиране на обекти, особено ако го прилагаме към вече разработен или стар проект. Просто дефинирайте родителски клас, имплементирайте Cloneable в него, предоставете дефиницията на метода clone() и задачата ще бъде изпълнена.
  • Clone() е най-бързият начин за копиране на масив.

Недостатък на клонирането на обекти

Следва списък с някои недостатъци на метода clone():

c структура в структурата
  • За да използваме метода 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() копира стойностите на един обект в друг. Така че не е необходимо да пишем явен код, за да копираме стойността на един обект в друг.

Ако създадем друг обект чрез нова ключова дума и присвоим стойностите на друг обект към този, това ще изисква много обработка на този обект. Така че, за да спестим допълнителната задача за обработка, ние използваме метода clone().