Neden starting a thread inside the constructor is not a good idea numaralı Yığın Taşması hakkında bir soru var. Böyle bir şeyin sonucunun 'bu' kaçabileceğini anladım. Aynı zamanda publishing a EventListener from constructor'un da aynı sebepten dolayı kötü bir fikir olduğunu okudum. 'Bu' nın kaçabileceği konusunda bilmem gereken diğer desenler neler? yapıcı adresinin nesnenin herhangi örneği yöntemin çağrılması"Bu" nın Java'da kaçabileceği çeşitli yollar nelerdir?
cevap
o Mathod için this
sızdırıyor. Bu yöntem sizin denetiminiz altında olduğu sürece (herkes tarafından geçersiz kılınamaz) ve bu nedenle this
'dan daha fazla sızdırmadığınızdan emin olabilirsiniz. Herhangi bir yönteme argüman olarak this
'u kullanmak elbette daha açık bir varyanttır ve x.addEventListener(this)
derken bu durum gerçekleşir. Bir belki de daha insdidious, az belirgin beri yolu this
bağımsız değişken olarak kendisini this
değil kullanmaktır sızmaya ancak bir iç/yerel/anonim sınıfının bir örneği, bütün bu durumlarda
public class Main
{
private class MyListener extends MouseAdapter { ...}
public Main() {
class Listener1 extends MouseAdapter { ... }
someSwingComponent.addMouseListener(new MyListener()); // inner class
someSwingComponent.addMouseListener(new Listener1()); // local class
someSwingComponent.addFocusListener(new FocusAdapter() { ... }); // anonymous
}
}
demek this
olacak Bir yöntem argümanı olarak iletilen nesnenin ilişikteki örneği. Öte yandan, static
iç içe geçmiş sınıfı bildirirseniz, 'un bir kapatma örneğine sahip olmayacaktır.
Yani 'bu' bir uzaylı yöntemine bir argüman olarak geçtiğinde 'bu' sızabileceğini varsayabilirim ('Bir Sınıf' Foo'ya 'yabancı bir metot, üzerinde herhangi bir kontrole sahip olmayanlar ve diğer sınıfların yöntemleri anlamına gelebilir. veya C'nin kendisinde olmayan/geçersiz kılınabilen yöntemleri)? – Inquisitive
Görüyorum ki ilk cümlede yeterince açıklamamıştım. "Bu" nesnenin "herhangi bir örnek yöntemi" kastediyorum (kurucusu çalıştırılan). Yabancı yöntemler kadarıyla, erişim seviyeleri önemli değil. Önemli olan, 'bu' yöntemini bu tür bir yönteme - ister içsel bir sınıf örneğinden açıkça ya da dolaylı olarak - aktarıyor olmanızdır. –
Önemli bir ayrım, 'bu', tamamen oluşturulmasına izin verilmeden önce kısmi bir durumda kaçar. – phatfingers