Otro caso útil para WeakHashMap
y WeakReference
es una implementación de registro de escucha .
Cuando crea algo que quiere escuchar ciertos eventos, generalmente registra un oyente, por ejemplo
manager.registerListener(myListenerImpl);
Si manager
almacena su oyente con a WeakReference
, eso significa que no necesita eliminar el registro, por ejemplo, con un manager.removeListener(myListenerImpl)
porque se eliminará automáticamente una vez que su oyente o su componente que lo tiene no esté disponible.
Por supuesto, aún puede eliminar manualmente su escucha, pero si no lo hace o lo olvida, no causará una pérdida de memoria y no evitará que su escucha se recolecte basura.
¿Dónde WeakHashMap
entra en escena?
El registro de oyentes que desea almacenar oyentes registrados como WeakReference
s necesita una colección para almacenar estas referencias. No hay WeakHashSet
implementación en la biblioteca estándar de Java solo a WeakHashMap
pero podemos usar fácilmente la última para "implementar" la funcionalidad de la primera:
Set<ListenerType> listenerSet =
Collections.newSetFromMap(new WeakHashMap<ListenerType, Boolean>());
Con esto listenerSet
para registrar un nuevo oyente, solo tiene que agregarlo al conjunto, e incluso si no se elimina explícitamente, si el oyente ya no está referenciado, la JVM lo eliminará automáticamente.