İçin bir başka kullanışlı durum WeakHashMapve WeakReferencebir olan dinleyici kayıt uygulaması .
Belirli olayları dinlemek isteyen bir şey oluşturduğunuzda, genellikle bir dinleyici kaydedersiniz, ör.
manager.registerListener(myListenerImpl);
Eğer managermağazalarda bir ile dinleyici WeakReference, bir ile kayıt örneğin kaldırmak gerekmez demekse manager.removeListener(myListenerImpl)otomatik olarak dinleyici kez kaldırılacak veya dinleyici tutan da bileşen kullanılamaz hale çünkü.
Tabii ki hala dinleyicinizi el ile kaldırabilirsiniz, ancak bunu unutmazsanız veya unutursanız, bellek sızıntısına neden olmaz ve dinleyicinizin çöp toplanmasını engellemez.
WeakHashMapResme nereden geliyor?
Kayıtlı dinleyicileri WeakReferences olarak saklamak isteyen dinleyici kayıt defteri, bu referansları saklamak için bir koleksiyona ihtiyaç duyar. WeakHashSetStandart Java kitaplığında yalnızca bir uygulama yoktur , WeakHashMapancak birincisinin işlevselliğini "uygulamak" için sonuncusunu kolayca kullanabiliriz:
Set<ListenerType> listenerSet =
Collections.newSetFromMap(new WeakHashMap<ListenerType, Boolean>());
Bununla listenerSetyeni bir dinleyici kayıt sadece kümesine eklemek zorunda ve açıkça kaldırılır olmasa bile dinleyici artık başvuruda bulunulan, bu JVM tarafından otomatik olarak kaldırılacaktır.