SORU
12 Mayıs 2010, ÇARŞAMBA


Java yapıcı özel olabilir?

Bir kurucu özel olabilir? Nasıl özel bir kurucu yararlıdır?

CEVAP
12 Mayıs 2010, ÇARŞAMBA


Evet, bir kurucu özel olabilir. Bu farklı kullanım alanları da var. Böyle bir kullanım size tavsiye etmem singleton design anti-pattern kullanarak. Başka, daha meşru kullanımı, delege kurucular; bir tane daha alabilirsin yapıcı alıyor, bir sürü farklı seçenek bu gerçekten bir uygulama ayrıntı, çok özel, ama daha sonra kalan kurucular temsilciye.

Bir örnek delege kurucular, aşağıdaki sınıf sağlar kurtarmak için bir değer ve bir tür, ama sadece sağlar yapmak için bir alt tür, yapım genel kurucu özel gerekli sağlamak için yalnızca izin verilen türleri kullanılır. Ortak özel kurucu kodu yeniden yardımcı olur.

public class MyClass {
     private final String value;
     private final String type;

     public MyClass(int x){
         this(Integer.toString(x), "int");
     }

     public MyClass(boolean x){
         this(Boolean.toString(x), "boolean");
     }

     public String toString(){
         return value;
     }

     public String getType(){
         return type;
     }

     private MyClass(String value, String type){
         this.value = value;
         this.type = type;
     }
}

Edit< / ^ br . Birkaç yıl sonra gelen bu cevap baktığımızda, bu cevap eksik ve biraz aşırı hem de dikkat etmek istiyorum. Tekiz aslında anti-desen ve genellikle mümkün olduğunca kaçınılmalıdır; ancak, tekiz ayrıca özel kurucular çok kullanan var, ve benim cevabım sadece bir isim.

Özel kurucular kullanıldığı bir kaç dava daha vermek için:

  1. Oluşturmak için bir uninstantiable sınıf sadece toplama ile ilgili statik işlevleri (bu temelde bir tek, ama eğer vatansız ve statik fonksiyonları çalışır kesinlikle parametreleri yerine sınıf Devlet, bu değildir gibi mantıksız bir yaklaşım olarak benim daha önce kendini görünüyor öneririm, gerçi kullanarak bir arayüz Bu bağımlılık enjekte sık sık yapar bunu daha kolay sağlamak için API zaman uygulama gerektirir daha büyük sayılar bağımlılıkları veya diğer formları bağlam).

  2. Ne zaman orada çok farklı yollar oluşturmak için bir nesne, özel bir kurucu olabilir yapmak daha kolay anlamak için farklı yollar inşa (örneğin, hangisi daha okunabilir için new ArrayList(5) ArrayList.createWithCapacity(5), ArrayList.createWithContents(5), ArrayList.createWithInitialSize(5)). Diğer bir deyişle, özel bir kurucu daha anlaşılır olan fabrika fonksiyonu sağlar, ve daha sonra kurucu Özel yapım insanlar sadece kullanan belli eder kendini daha adlarını sağlar. Bu da genellikle the builder pattern (*örneğin 6*) ile kullanılır.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • trickycharms

    trickycharms

    6 Aralık 2013
  • TV and Lust

    TV and Lust

    26 HAZİRAN 2006
  • YouChewBu

    YouChewBu

    26 Ocak 2009