Apakah Anda benar-benar harus menggunakan clone? Kebanyakan orang setuju bahwa Java clonerusak.
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 clonesangat rusak. [...] Sayang sekali yang Cloneablerusak, tapi itu terjadi.
Anda dapat membaca lebih banyak diskusi tentang topik ini dalam bukunya Effective Java 2nd Edition, Butir 11: Mengabaikan clonedengan 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 clonemetode 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 AssertionErrorseperti 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 clonetanpa menelepon super.clone.
Cloneablemaka melemparAssertionErrordaripada sekadar polosErrorsedikit lebih ekspresif.