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. –
- 1. ben gibi oturum fasulye çeşitli yollar denedik
- 2. Çeşitli Python CMS'leri ve durumları nelerdir?
- 3. Çeşitli bağlamalar nelerdir? ve bana neden bir liman hatası veriyorlar?
- 4. Bu grafikteki tüm yollar nasıl alınır? Recursive?
- 5. Bağlantı, denetleyici ve derleme işlevlerindeki çeşitli enjektabllar nelerdir?
- 6. Bu garip ortam değişkenleri nelerdir?
- 7. Yazıcı ile javada dizileri kullanma
- 8. View.bringToFront() 'nın karşısında Android
- 9. çeşitli yerlerde
- 10. Bu 2 LINQ ifadesine verilen adlar nelerdir
- 11. bir javascript istisna bu gizemli yöntemler nelerdir?
- 12. shm_open() ve ftruncate() 'nın amacı?
- 13. Winform'lardaki Göreli Yollar
- 14. Salatalık javada senaryo adı nasıl alınır?
- 15. Pencereler için tutulmayı kullanarak javada akış
- 16. birleştiren URI'ları ve Yollar
- 17. Deve - 'alt Yollar'
- 18. .load() ve göreli yollar
- 19. isnan() 'nın Swift eşdeğeri hangisidir?
- 20. Uçucu değişken, javada statik olarak tanımlanabilir mi?
- 21. Koyu renklerin parlak hale getirilmesi javada parlak
- 22. SQL veya kısa yollar?
- 23. JSP mutlak yollar
- 24. Solr'da hiyerarşik kaplama yapmak için yollar?
- 25. İlkbahar mvc'de yeniden yönlendirme sonrasında denetleyiciden geçiş parametreleri için yollar nelerdir?
- 26. Emacs'de çeşitli satırlar girme
- 27. OpenMP Çeşitli "paylaşılan" yönlendiriciler?
- 28. Python'da göreceli yollar nasıl giderilir?
- 29. Çeşitli Android Emülatörler
- 30. Çözünürlük sınıfı çeşitli arayüzler
Önemli bir ayrım, 'bu', tamamen oluşturulmasına izin verilmeden önce kısmi bir durumda kaçar. – phatfingers