SORU
13 EKİM 2010, ÇARŞAMBA


Java - bu Sızıntı kurucu

(En) 6.9.1, ve 'Leaking this in constructor' uyarı ile ilgili bir sorun var Eclipse uyarıları önlemek için istiyorum.

Sorun, yapıcı bir yöntem arayıp," "this" tam olarak başlatılmadı. beri tehlikeli. "this geçen anlıyorum

Kolay yapıcı özel ve sadece aynı sınıftan denir, çünkü tek derslerimi uyarı düzeltmek için.

(Basit) eski kod:

private Singleton() {
  ...
  addWindowFocusListener(this);
}

public static Singleton getInstance() {

  ...
  instance = new Singleton();
  ...
}

Yeni kod (basit):

private Singleton() {
  ...
}

public static Singleton getInstance() {

  ...
  instance = new Singleton();
  addWindowFocusListener( instance );
  ...
}

Bu düzeltme ise kurucu ortak ise çalışmıyor ve diğer sınıflardan çağrılabilir. Nasıl aşağıdaki kodu çözmek için mümkün:

public class MyClass {

  ...
  List<MyClass> instances = new ArrayList<MyClass>();
  ...

  public MyClass() {
    ...
    instances.add(this);
  }

}

Elbette tüm kodlarımı bu sınıf ( örneğin init yöntemini çağırarak) kullanarak değiştirmek için gerektirmeyen bir düzeltme istiyorum.

CEVAP
13 EKİM 2010, ÇARŞAMBA


Emin ** 10 oluşturucu sonunda koymak için yapmak beriIMHO derleyici sadece uyarı bastırmak için söylemek güvenli olmalıdır(*). Bir uyarı, doğası gereği, mutlaka bir sorun var anlamına gelmez, sadece dikkat edilmesi gerekir.

Eğer ne yaptığınızı biliyorsanız @SuppressWarnings bir açıklama kullanabilirsiniz. Terrel yorumlarda da belirtildiği gibi, aşağıdaki ek açıklama Eclipse 6.9.1 olarak yapıyor

@SuppressWarnings("LeakingThisInConstructor")

(*) Güncelleme:İsthar ve Sergey "kod oluşturucu tamamen güvenli (soru gibi görünebilir ama değil." sızıntı durumlar vardır belirttiği gibi Bu onaylamak için daha fazla okuyucu var mı? Belirtilen nedenlerden dolayı bu cevabı silme düşünüyorum.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Caroline Martin

    Caroline Mar

    19 EYLÜL 2008
  • jbignacio

    jbignacio

    13 Mart 2006
  • Sergio Fernandez

    Sergio Ferna

    1 EKİM 2009