Kesinlikle kullanmak zorunda clone
mısın? Çoğu insan Java'nın clone
bozuk olduğu konusunda hemfikir .
Josh Bloch on Design - Oluşturucuyu Kopyala ve Klonlama
Kitabımdaki klonlama ile ilgili maddeyi okursanız, özellikle satır aralarını okursanız clone
, derinden kırık olduğunu düşündüğümü anlayacaksınız . [...] Cloneable
Kırılan bir utanç ama oluyor.
Etkili Java 2. Baskı, Madde 11: Mantıklı bir clone
şekilde geçersiz kıl kitabında konu hakkında daha fazla tartışma okuyabilirsiniz . Bunun yerine bir kopya oluşturucu veya kopyalama fabrikası kullanılmasını önerir.
Yapmanız gerektiğini düşünüyorsanız, nasıl uygulamanız gerektiğine dair sayfalarca sayfa yazmaya devam etti clone
. Ama bununla kapattı:
Tüm bu karmaşıklıklar gerçekten gerekli mi? Seyrek. Uygulayan bir sınıfı genişletirseniz Cloneable
, iyi huylu bir clone
yöntemi uygulamaktan başka seçeneğiniz yoktur . Aksi takdirde, alternatif nesne kopyalama yöntemleri sağlamanız veya bu özelliği sağlamamanız daha iyi olur .
Vurgu onundu, benim değil.
Uygulama dışında çok az seçeneğiniz olduğunu açıkça belirttiğinize göre clone
, işte bu durumda yapabilecekleriniz: emin olun MyObject extends java.lang.Object implements java.lang.Cloneable
. Durum buysa, ASLA bir CloneNotSupportedException
. AssertionError
Bazılarının önerdiği gibi atmak mantıklı görünüyor, ancak bu özel durumda catch bloğunun neden asla girilmeyeceğini açıklayan bir yorum da ekleyebilirsiniz .
Alternatif olarak, başkalarının da önerdiği gibi, belki de clone
aramadan uygulayabilirsiniz super.clone
.
Cloneable
zamanAssertionError
sadece bir düz yerine bir atmakError
biraz daha anlamlı olacaktır.