Kesinlikle kullanmak zorunda clonemısın? Çoğu insan Java'nın clonebozuk 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 . [...] CloneableKı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 cloneyö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. AssertionErrorBazı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 clonearamadan uygulayabilirsiniz super.clone.
CloneablezamanAssertionErrorsadece bir düz yerine bir atmakErrorbiraz daha anlamlı olacaktır.