Ang clone method at ang Cloneable interface - 1

"Hi, Amigo!"

"Hi, Kim."

"Sasabihin ko sa iyo ang tungkol sa clone() method."

"Ang punto ng pamamaraang ito ay upang i-clone ang isang bagay, o sa madaling salita, upang lumikha ng isang clone / kopya / dobleng ng bagay."

"Kapag tinawag ang pamamaraang ito, ang Java virtual machine ay lumilikha at nagbabalik ng duplicate ng object kung saan ito tinatawag.

Ang pagpapatupad ng Object class ng clone method ay napaka primitive: isang bagong object lang ang nilikha, at ang mga value ng mga field ng orihinal na object ay itinalaga sa mga field nito.

Kung ang kinopyang bagay ay naglalaman ng mga sanggunian sa iba pang mga bagay, ang mga sangguniang iyon ay makokopya. Ang mga duplicate ng mga bagay na iyon ay hindi gagawin."

"Hmm. Hindi na iyon gaanong ipagpatuloy."

"Ang bagay ay, ang Java virtual machine ay hindi alam kung aling mga bagay ang maaari o hindi mai-clone. Halimbawa, ang mga file ay hindi ma-clone. Ang parehong ay totoo para sa isang System.in stream."

"Kaya, ang tanong ng ganap na pag-clone ay napunta sa mga developer ng isang klase. "Ang lahat ng ito ay katulad ng kung paano pinangangasiwaan ang equals method. Mayroong kahit isang bagay na maihahambing sa hashCode: ang Cloneable na interface."

"Ang Cloneable na interface ay tinatawag na 'marker interface': wala itong anumang mga pamamaraan at ginagamit upang markahan ang ilang mga klase.

"Kung naniniwala ang developer ng isang klase na maaaring ma-clone ang mga bagay ng klase, minarkahan niya ito gamit ang interface na ito (ibig sabihin, ginagawang Cloneable ang klase)."

"Kung hindi gusto ng developer ang karaniwang pagpapatupad ng clone method, dapat siyang sumulat ng sarili niyang gagawa ng duplicate na object sa tamang paraan."

"Kapag tinawagan mo ang clone () na paraan, sinusuri ng Java kung sinusuportahan ng object ang Cloneable na interface. Kung gagawin nito, pagkatapos ay i-clone nito ang object gamit ang clone () na paraan; kung hindi, naghagis ito ng CloneNotSupportedException."

"Sa madaling salita, dapat nating i-override ang clone method o gawing Cloneable ang klase?"

"Oo, ngunit kailangan mo pa ring i-override ang pamamaraan. Ang clone() na pamamaraan ay idineklara bilang protektado, kaya maaari lamang itong tawagan ng mga klase sa package nito (java.lang.*) o ng kanilang mga subclass."

"Medyo nalilito ako—so ano ang kailangan kong gawin para mai-clone ang isang bagay?"

"Kung gusto mong gamitin ang "default" na paraan ng cloning ng klase ng Object, kailangan mong:

" a) Idagdag ang Cloneable na interface sa iyong klase"

" b) I-override ang clone na paraan at tawagan ang pagpapatupad ng superclass sa loob ng iyong pagpapatupad:"

class Point implements Cloneable
{
 int x;
 int y;

 public Object clone()
 {
  return super.clone();
 }
    }

"O maaari kang magsulat ng isang pagpapatupad ng clone method nang mag-isa:"

class Point
{
 int x;
 int y;

 public Object clone()
 {
  Point point = new Point();
  point.x = this.x;
  point.y = this.y;
  return point;
 }
}

"Iyan ay isang kawili-wiling paraan. Sigurado akong gagamitin ko ito. Paminsan-minsan..."