SORU
29 NİSAN 2009, ÇARŞAMBA


Kullanım Başlatıcılar vs Kurucular Java

Son olarak Java benim becerileri üzerinde fırçalama oldum ve bilmediğim işlevi birkaç parça buldum daha önce. Statik ve Örnek Başlatıcılar iki tür teknikler vardır.

Benim sorum ne zaman bir oluşturucu kod da dahil olmak üzere yerine bir başlatıcı kullanmak istiyorsunuz? Birkaç bariz olasılıkları düşündüm:

  • statik/örnek başlatıcılar "" statik/örnek değişkenleri yapıcı olamaz oysa . son değerini ayarlamak için kullanılır

  • statik başlatıcılar ayarlamak için kullanılan değer herhangi bir statik değişken bir sınıf, bir daha etkili olması "(someStaticVar == null) // do stuff" kod bloğunun başında her kurucu

Her iki durumda varsayalım ki kodu gerekli ayarlamak için bu değişkenler daha karmaşık daha basit "değişken = DEĞER", gibi, başka türlü olmayacak gibi görünüyor, herhangi bir nedenle bir başlatıcı yerine sadece ayar değerini ne zaman ilan değişkeni.

Bu önemsiz kazançları (özellikle son bir değişkeni ayarlamak için yeteneği) değil iken, ancak, bir başlatıcı kullanılması gereken durumlarda oldukça sınırlı sayıda var gibi görünüyor.

Kesinlikle bir kurucu yapılanların bir sürü için bir başlatıcı kullanabilirsiniz, ama gerçekten bunu yapmak için bir neden görmüyorum. Tüm markalar için bir sınıf hisse büyük miktarda kod, kullanımı özel başlatılamadı() fonksiyonu gibi yapmak daha mantıklı bana göre kullanarak bir başlatıcı çünkü değil kilidi seks içine bu kodu çalıştırmak için, yazı yazarken yeni bir kurucu.

Bir şey mi kaçırdım? Bir başlatıcı kullanılması gereken bazı durumlar vardır? Ya gerçekten sadece sınırlı bir araç çok özel durumlarda kullanılır?

CEVAP
29 NİSAN 2009, ÇARŞAMBA


Statik başlatıcılar cletus belirtildiği gibi kullanışlıdır ve aynı şekilde onları kullanıyorum. Eğer bir statik değişken için başlatıldı, sınıf dolu, sonra bir statik başlatıcı yol gitmek, özellikle bu fonksiyonu bir karmaşık başlatma ve hala statik değişken final. Bu büyük bir zafer.

"Eğer == null someStaticVar () / /" dağınık ve hata eğilimli. şeyler bulabilirim Eğer statik olarak başlatılmış ve final, sonra ilan ise bu imkanı null olmaktan kaçının.

Ancak, derken kafam karıştı:

statik/örnek başlatıcılar "son"değerini ayarlamak için kullanılır yapıcı edemez ise, statik/örnek değişkenleri

Hem diyorsun herhalde:

  • statik başlatıcılar "" yapıcı olamaz oysa . statik değişkenler nihai değerini ayarlamak için kullanılır
  • örnek başlatıcılar "" yapıcı olamaz oysa . örnek değişkenler nihai değerini ayarlamak için kullanılır

ve ilk nokta, doğru, ikincisi yanlış. Örneğin, bunu yapabilirsiniz:

class MyClass {
    private final int counter;
    public MyClass(final int counter) {
        this.counter = counter;
    }
}

Bir sürü kod kurucular arasında paylaşıldığında da, bu işlemek için en iyi yollarından biri zincir markalar için, varsayılan değerleri sağlar. Bu oldukça açıktır ne yapılıyor: yapar

class MyClass {
    private final int counter;
    public MyClass() {
        this(0);
    }
    public MyClass(final int counter) {
        this.counter = counter;
    }
}

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Kim Barbin

    Kim Barbin

    3 Mayıs 2012
  • MandMEvangelists

    MandMEvangel

    28 Ocak 2008
  • UsherVEVO

    UsherVEVO

    15 EKİM 2009