Kaedah klon dan antara muka Boleh Diklon - 1

"Hai, Amigo!"

"Hai, Kim."

"Saya akan memberitahu anda tentang kaedah klon()."

"Maksud kaedah ini adalah untuk mengklon objek, atau dengan kata lain, untuk mencipta klon/salinan/pendua objek."

"Apabila kaedah ini dipanggil, mesin maya Java mencipta dan mengembalikan pendua objek yang dipanggil.

Pelaksanaan kaedah klon kelas Objek adalah sangat primitif: hanya satu objek baharu dicipta, dan nilai medan objek asal diberikan kepada medannya.

Jika objek yang disalin mengandungi rujukan kepada objek lain, maka rujukan tersebut akan disalin. Pendua objek tersebut tidak akan dibuat."

"Hmm. Itu bukan perkara yang perlu diteruskan."

"Perkaranya, mesin maya Java tidak tahu objek mana yang boleh atau tidak boleh diklon. Contohnya, fail tidak boleh diklon. Perkara yang sama berlaku untuk aliran System.in."

"Jadi, persoalan pengklonan sepenuhnya telah ditujukan kepada pembangun kelas. "Ini semua serupa dengan cara kaedah equals dikendalikan. Malah ada sesuatu yang setanding dengan hashCode: antara muka Boleh Diklon."

" Antara muka Cloneable ialah apa yang dipanggil 'antara muka penanda': ia tidak mempunyai sebarang kaedah dan digunakan untuk menandakan kelas tertentu.

"Jika pembangun kelas percaya objek kelas boleh diklon, dia menandakannya dengan antara muka ini (iaitu menjadikan kelas melaksanakan Boleh Diklon)."

"Jika pembangun tidak menyukai pelaksanaan standard kaedah klon, dia mesti menulis sendiri yang akan mencipta objek pendua dengan cara yang betul."

"Apabila anda memanggil kaedah klon (), Java menyemak sama ada objek itu menyokong antara muka Boleh Diklon. Jika ia ada, maka ia mengklon objek menggunakan kaedah klon ( ); jika tidak, ia membuang CloneNotSupportedException."

"Dalam erti kata lain, kita mesti sama ada mengatasi kaedah klon atau menjadikan kelas melaksanakan Boleh Diklon?"

"Ya, tetapi anda masih perlu mengatasi kaedah tersebut. Kaedah klon() diisytiharkan sebagai dilindungi, jadi ia hanya boleh dipanggil oleh kelas dalam pakejnya (java.lang.*) atau subkelasnya."

"Saya agak keliru—jadi apa yang perlu saya lakukan untuk mengklon objek?"

"Jika anda ingin menggunakan kaedah pengklonan «lalai» kelas Objek, anda perlu:

" a) Tambahkan antara muka Boleh Diklon pada kelas anda"

" b) Gantikan kaedah klon dan panggil pelaksanaan superclass dalam pelaksanaan anda:"

class Point implements Cloneable
{
 int x;
 int y;

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

"Atau anda boleh menulis pelaksanaan kaedah klon sepenuhnya sendiri:"

class Point
{
 int x;
 int y;

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

"Itu kaedah yang menarik. Saya pasti saya akan menggunakannya. Sekali-sekala…"