İçin bir başka kullanışlı durum WeakHashMap
ve WeakReference
bir olan dinleyici kayıt uygulaması .
Belirli olayları dinlemek isteyen bir şey oluşturduğunuzda, genellikle bir dinleyici kaydedersiniz, ör.
manager.registerListener(myListenerImpl);
Eğer manager
mağ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.
WeakHashMap
Resme nereden geliyor?
Kayıtlı dinleyicileri WeakReference
s olarak saklamak isteyen dinleyici kayıt defteri, bu referansları saklamak için bir koleksiyona ihtiyaç duyar. WeakHashSet
Standart Java kitaplığında yalnızca bir uygulama yoktur , WeakHashMap
ancak birincisinin işlevselliğini "uygulamak" için sonuncusunu kolayca kullanabiliriz:
Set<ListenerType> listenerSet =
Collections.newSetFromMap(new WeakHashMap<ListenerType, Boolean>());
Bununla listenerSet
yeni 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.