2013-05-02 16 views
8

Java klonlamasıyla ilgili çevrimiçi eğiticiler arıyordum, ancak sadece klonla() ilgili dezavantajları ve avantajları hakkında hiçbir şey bulamadım. Java clone() kullanmanın bazı avantajlarını bilmek isterim.Java Klonlama'nın Avantajları

cevap

10

Klonlama kullanımları kesinlikle vardır. Nesnelerde gösterilen, "farklı kaydet" (çoğalt ve yeniden adlandır) yapabileceğiniz veri kayıtlarınızın olduğu her türlü iş uygulamasını düşünün. Bu veri, Cloneable arabirimini uygulayan bir nesnede tutulursa, orijinali kopyalayabilir ve yeni bilgilerle güncelleyebilirsiniz.

Bu yeni bir nesne örneği oluşturmak ve açık üzerinden veri, tüm kopyalama üstündür. Bazı insanlar bunu kopyalayıcıyı yapan yardımcı sınıflar ve yöntemlerle ele alırlar, ancak o zaman sınıfın kendisi dışında bir OO programlaması zayıf olan bir sınıfın kopyalanması için gerekli bilgilere sahip olursunuz. Bir GUI için bir takviye deposu olarak bir sınıf kullandığınızda

Sevdiğim Başka bir örnek kullanım

ve GUI bir reset düğmesine sahip olduğunu. GUI başlatıldığında, yedekleme deposu nesnesini klonladım. Daha sonra kullanıcı geri yüklemeye basarsa, GUI'yi klon nesnesindeki değerlere yeniden başlatabilirim, ancak hangi bilgileri değiştirmiş olabilirler veya depodaki orijinal bilgilerin yeni bir kopyasını aldım. Kesinlikle birçok kullanım var.

Klonlama bildiğiniz gibi bir kalıtım çerçevesindeki sorunları gündeme getirebilir ve aksi takdirde hafif veri sınıflarını toparlayabilir, bu yüzden bir iş gereksinimi olmadıkça bir nesneyi klonlanabilir olmaz. Orijinal nesnenin tam kopyasını oluşturmak için bir (sözde) kolay bir yol olan:

3

Ben sorun klonlama avantajları hakkında bir şey bulmakta zorlanırsanız nedeni avantajı örtülü olduğunu düşünüyorum. Ne yazık ki, Java'nın klonlama() ve Cloneable aracılığıyla yerleşik klonlama mekanizmasının, sınıflarınızın tasarımı için sahip olduğu korkunç etkilerle ilgili olarak düşünmek için çok fazla dezavantajı vardır. Josh Bloch, neden bir interview numaralı telefondan özetlenen Etkili Java kitabında clone() veya Cloneable kullanmamanız için bir bölüm içermektedir.

genel öneri hala sığ ya da derin kopya uygun olup olmadığına karar vermek zorunda olsa da, bunun yerine klon() veya klonlanamaz kullanmanın bir kopya kurucu kullanmaktır. Ayrıca, derin bir klon oluşturmak için Serializable veya JAXB gibi bir seri hale getirme API'sini ve çeşitli klonlama kitaplıklarını da kullanabilirsiniz. İlgili bir soruda çok güzel bir tartışma bulabilirsiniz, Java: recommended solution for deep cloning/copying an instance.

0

Object.clone() birçok tasarım sorunları var ama yine de nesneleri kopyalama popüler ve en kolay yoldur. klon kullanan bazı avantajları()) (

  • O asırlık projeleri için, sadece, içinde klonlanamaz uygulamak, bir üst sınıfını tanımlamak klonu tanım sunmalıdır bile klonlama uygulamak için en kolay yoludur

    vardır Metot ve siz ebeveynlerinizin her çocuğunun klonlama özelliğini alacağınız hazırsınız.
  • Klonlama, çok daha az kod satırı gerektirir; yalnızca, derin kopyaya gerek duymazsanız 4 veya 5 satır uzunluğunda clone() yöntemiyle soyut bir sınıf.
  • Klonlama, dizileri kopyalamanın en hızlı yoludur. Bir dizi klon çağrı serbest 1.5 itibarıyla
  • , olan derleme tipi açık şekilde tipi döküm gerektirmeyen dizileri üzerinde klon çağrı anlamına gelir klonlandı dizinin aynı olan bir dizi döner.

Okuyabiliyorsun daha üzerinde Java Cloning - Copy Constructor versus Cloning

İlgili konular