Metode clone dan antarmuka Cloneable - 1

"Hai, Amigo!"

"Hai, Kim."

"Saya akan memberi tahu Anda tentang metode clone()."

"Inti dari metode ini adalah untuk mengkloning suatu objek, atau dengan kata lain, untuk membuat klon/salinan/duplikat dari objek tersebut."

"Saat metode ini dipanggil, mesin virtual Java membuat dan mengembalikan duplikat dari objek yang dipanggil.

Implementasi kelas Object dari metode clone sangat primitif: hanya satu objek baru yang dibuat, dan nilai dari field objek asli ditugaskan ke fieldnya.

Jika objek yang disalin berisi referensi ke objek lain, maka referensi tersebut akan disalin. Duplikat objek tersebut tidak akan dibuat."

"Hmm. Itu tidak banyak untuk melanjutkan."

"Masalahnya, mesin virtual Java tidak mengetahui objek mana yang dapat atau tidak dapat dikloning. Misalnya, file tidak dapat dikloning. Hal yang sama berlaku untuk aliran System.in."

"Jadi, pertanyaan tentang kloning penuh diajukan ke pengembang kelas. "Ini semua mirip dengan bagaimana metode equals ditangani. Bahkan ada sesuatu yang sebanding dengan kode hash: antarmuka yang dapat dikloning."

" Antarmuka yang dapat dikloning adalah apa yang disebut 'antarmuka penanda': tidak memiliki metode apa pun dan digunakan untuk menandai kelas tertentu.

"Jika pengembang kelas percaya bahwa objek kelas dapat dikloning, dia menandainya dengan antarmuka ini (yaitu membuat kelas mengimplementasikan Cloneable)."

"Jika pengembang tidak menyukai penerapan standar metode klon, dia harus menulis sendiri yang akan membuat objek duplikat dengan cara yang benar."

"Saat Anda memanggil metode clone (), Java memeriksa apakah objek mendukung antarmuka Cloneable. Jika ya, maka objek akan dikloning menggunakan metode clone (); jika tidak, ia melempar CloneNotSupportedException."

"Dengan kata lain, kita harus mengganti metode clone atau membuat kelas mengimplementasikan Cloneable?"

"Ya, tapi Anda tetap harus mengganti metodenya. Metode clone() dideklarasikan sebagai protected, sehingga hanya bisa dipanggil oleh kelas dalam paketnya (java.lang.*) atau subkelasnya."

"Saya agak bingung—jadi apa yang harus saya lakukan untuk mengkloning objek?"

"Jika Anda ingin menggunakan metode kloning «default» kelas Objek, Anda perlu:

" a) Tambahkan antarmuka Cloneable ke kelas Anda"

" b) Ganti metode clone dan panggil implementasi superclass dalam implementasi Anda:"

class Point implements Cloneable
{
 int x;
 int y;

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

"Atau Anda dapat menulis implementasi metode 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 metode yang menarik. Aku yakin akan menggunakannya. Kadang-kadang…"