logo

Клонирање објеката у Јави

конструктор у ЈавиТхе клонирање објеката је начин да се направи тачна копија објекта. Метода цлоне() класе Објецт се користи за клонирање објекта.

Тхе јава.ланг.Цлонеабле интерфејс мора бити имплементиран од стране класе чији клон објекта желимо да креирамо. Ако не имплементирамо Цлонеабле интерфејс, генерише се метода цлоне(). ЦлонеНотСуппортедЕкцептион .

Тхе цлоне() метода је дефинисан у класи Објецт. Синтакса методе цлоне() је следећа:

 protected Object clone() throws CloneNotSupportedException 

Зашто користити методу цлоне()?

Тхе цлоне() метода чува додатни задатак обраде за креирање тачне копије објекта. Ако то изведемо користећи нову кључну реч, биће потребно доста времена обраде да се изврши, зато користимо клонирање објеката.

Предност клонирања објеката

Иако Објецт.цлоне() има неких проблема са дизајном, он је и даље популаран и лак начин копирања објеката. Следи листа предности коришћења методе цлоне():

  • Не морате да пишете дугачке и понављајуће кодове. Само користите апстрактну класу са методом цлоне() од 4 или 5 редова.
  • То је најлакши и најефикаснији начин за копирање објеката, посебно ако га примењујемо на већ развијени или стари пројекат. Само дефинишите родитељску класу, имплементирајте Цлонеабле у њу, дајте дефиницију методе цлоне() и задатак ће бити обављен.
  • Цлоне() је најбржи начин за копирање низа.

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

Следи листа неких недостатака методе цлоне():

  • Да бисмо користили метод Објецт.цлоне(), морамо да променимо много синтаксе у нашем коду, као што је имплементација интерфејса за клонирање, дефинисање методе цлоне() и руковање ЦлонеНотСуппортедЕкцептион, и коначно, позивање Објецт.цлоне() итд.
  • Морамо да имплементирамо интерфејс који се може клонирати док у њему нема метода. Само морамо да га користимо да кажемо ЈВМ-у да можемо да извршимо цлоне() на нашем објекту.
  • Објецт.цлоне() је заштићен, тако да морамо обезбедити сопствени цлоне() и индиректно позвати Објецт.цлоне() из њега.
  • Објецт.цлоне() не позива ниједан конструктор тако да немамо никакву контролу над конструкцијом објекта.
  • Ако желите да напишете метод клонирања у подређеној класи, онда све њене надкласе треба да дефинишу метод цлоне() у њима или да га наследе од друге родитељске класе. У супротном, ланац супер.цлоне() неће успети.
  • Објецт.цлоне() подржава само плитко копирање, али ћемо морати да га заменимо ако нам је потребно дубоко клонирање.

Пример методе цлоне() (клонирање објекта)

Погледајмо једноставан пример клонирања објеката

 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 
преузмите пример клонирања објеката

Као што можете видети у горњем примеру, обе референтне променљиве имају исту вредност. Дакле, цлоне() копира вредности једног објекта у други. Дакле, не морамо да пишемо експлицитни код да бисмо копирали вредност објекта у други.

Ако креирамо други објекат помоћу нове кључне речи и доделимо вредности другог објекта овом, биће потребно много обраде овог објекта. Дакле, да бисмо сачували додатни задатак обраде користимо методу цлоне().