SORU
9 Temmuz 2009, PERŞEMBE


() kopya vs fabrika yöntemi yapıcı vs?

Klon uygulama konusunda hızlı bir google yaptım ve buldum Java: http://www.javapractices.com/topic/TopicAction.do?Id=71

Aşağıdaki açıklama vardır:

kopya yapıcılar ve statik fabrika metotları klonlamak için bir alternatif sağlar, ve çok daha kolay uygulamak için.

Tek istediğim derin bir kopyasını yapmak. Clone() uygulama mantıklı, ama son derece google, bu sırada madde bir sürü yapmak gibi görünüyor beni biraz korkutuyor.

Burada fark ettim bu konuyu

Kopya kurucular Jenerik çalışmazlar.

İşte derlemek olmaz pseudo-code.

public class MyClass<T>{
   ..
   public void copyData(T data){
       T copy=new T(data);//This isn't going to work.    
   }
   ..
}

Örnek 1: bir kopyasını genel bir sınıf. kurucu Kullanarak

Fabrika yöntemleri standart isimler yok.

Oldukça güzel yeniden kullanılabilir kod için bir arayüzü var.

public class MyClass<T>{
    ..
    public void copyData(T data){
        T copy=data.clone();//Throws an exception if the input was not cloneable
    }
    ..
}

Örnek 2: clone() Kullanarak genel bir sınıf.

O klon statik bir yöntem olmadığını fark ettim, ama yine de tüm korunan alanların derin kopyalarını yapmak için gerekli olmaz mı? Klon uygularken(), sigara içilmez cloneable alt sınıflar bana önemsiz görünüyor. istisnalar atmak için ekstra çaba

Bir şey mi kaçırdım? Herhangi bir anlayış mutluluk duyacağız.

CEVAP
9 Temmuz 2009, PERŞEMBE


Temelde, clone is broken. Hiçbir şey jenerik ile kolayca çalışır. Böyle bir şey (nokta geçmek için kısaltılmış) varsa:

public class SomeClass<T extends Copyable> {


    public T copy(T object) {
        return (T) object.copy();
    }
}

interface Copyable {
    Copyable copy();
}

Derleyici bir uyarı ile bu işi yapabilirsiniz. Jenerik zamanında silinir çünkü, bir kopyasını yapan bir derleyici uyarı üreten bir döküm var.Bu durumda önlenebilir değildir.. Tüm bazı durumlarda (teşekkürler, kb304) ama önlenebilir. Bir alt sınıf veya bilinmeyen bir sınıf arabirimi (mutlaka aynı sınıf oluşturmak olmadığını copyables bir koleksiyon boyunca yineleme olduğun gibi) uygulamaya destek olduğu bir durumu düşünün.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • ASUS

    ASUS

    22 EKİM 2005
  • Gavin Hoey

    Gavin Hoey

    21 Aralık 2007
  • Jesse Pimenta

    Jesse Piment

    5 EKİM 2011