Apakah Anda benar-benar harus menggunakan clone
? Kebanyakan orang setuju bahwa Java clone
rusak.
Josh Bloch tentang Desain - Salin Pembuat versus Kloning
Jika Anda telah membaca item tentang kloning dalam buku saya, terutama jika Anda membaca yang tersirat, Anda akan tahu bahwa menurut saya clone
sangat rusak. [...] Sayang sekali yang Cloneable
rusak, tapi itu terjadi.
Anda dapat membaca lebih banyak diskusi tentang topik ini dalam bukunya Effective Java 2nd Edition, Butir 11: Mengabaikan clone
dengan bijaksana . Sebagai gantinya, dia merekomendasikan untuk menggunakan pembuat salinan atau pabrik penyalinan.
Dia melanjutkan untuk menulis halaman halaman tentang bagaimana, jika Anda merasa harus, Anda harus menerapkan clone
. Tapi dia menutup dengan ini:
Apakah semua kerumitan ini benar-benar diperlukan? Jarang. Jika Anda memperluas kelas yang mengimplementasikan Cloneable
, Anda tidak punya banyak pilihan selain menerapkan clone
metode berperilaku baik . Jika tidak, Anda lebih baik menyediakan cara alternatif untuk menyalin objek, atau tidak menyediakan kemampuan .
Penekanannya adalah miliknya, bukan milikku.
Karena Anda telah menjelaskan bahwa Anda tidak punya banyak pilihan selain menerapkan clone
, inilah yang dapat Anda lakukan dalam kasus ini: pastikan itu MyObject extends java.lang.Object implements java.lang.Cloneable
. Jika demikian, maka Anda dapat menjamin bahwa Anda TIDAK PERNAH menangkap CloneNotSupportedException
. Melempar AssertionError
seperti yang disarankan beberapa tampaknya masuk akal, tetapi Anda juga dapat menambahkan komentar yang menjelaskan mengapa blok tangkap tidak akan pernah dimasukkan dalam kasus khusus ini .
Atau, seperti yang juga disarankan orang lain, Anda mungkin dapat menerapkan clone
tanpa menelepon super.clone
.
Cloneable
maka melemparAssertionError
daripada sekadar polosError
sedikit lebih ekspresif.