2009-08-12 21 views

cevap

21

Kısa cevap: sığ.

-so-kısa olmasın cevap: Bu geçersiz etmiyorsa , AnyRef.clone() bunun uygulanması olarak Java'nın Object.clone() kullanır. Object.clone() ile

Javadoc: Sınıf nesnesi için

yöntem klon özel klonlama işlemi gerçekleştirir. Bu nesnenin sınıf arayüzü klonlanamaz uygulamaması halinde Birincisi, daha sonra CloneNotSupportedException atılır. Tüm dizilerin, klonlanmasının, Cloneable arabirimini uyguladığı kabul edilir. Aksi takdirde, bu yöntem, bu nesne sınıfının yeni örneği oluşturur ve bu nesnenin karşılık gelen alanların tam içeriği, düzenleme tarafından olarak ise tüm alanlarını başlatır; 'un içeriği, alanların kendileri klonlanmamıştır. Böylece, bu yöntem, bu nesnenin bir "sığ kopya", bir "derin kopyalama" işlemi gerçekleştirir.

unutmayın:

  1. AnyRef.clone(), Java onun meslektaşı gibi, onun çağrılabilir değildir yüzden her yerden, bir "korumalı" erişim düzeyine sahip.
  2. Çalıştırmak için clone() için Cloneable uygulamanız gerekecektir.

Uzun cevap: kullanmayın: mantıklı

Özeti geçersiz kılma klonu: Etkili Java, 2nd Edition, Öğe 11 okuyun. Daha iyi alternatifler var.

+3

"Daha iyi alternatifler var." Bazılarına referans verir misin? –

+6

1. Kurucu, C++ başına kopyalayın. 2. Scala 2.8.x'te yerleşik "kopya" yöntemiyle vaka sınıfı. 3. Değiştirilebilir nesneler kullanın: kopyalamaya gerek yok, sadece paylaşın. –

+0

Yani C++ -like kopya kurucular aslında (tür) Scala'da iyidir? C++ dilinden geldim ve ilk kopya kurucularmı yapmadan önce bir noktayı kaçırıp kaçırmadığımı görmek istedim. Görünüşe göre ... iyi (nesnelerim değişebilir bir halde). – akauppi

İlgili konular