Kasus lain yang bermanfaat untuk WeakHashMapdan WeakReferenceadalah implementasi pendengar .
Ketika Anda membuat sesuatu yang ingin mendengarkan acara tertentu, biasanya Anda mendaftarkan pendengar, misalnya
manager.registerListener(myListenerImpl);
Jika managertoko menyimpan pendengar Anda dengan WeakReference, itu berarti Anda tidak perlu menghapus register misalnya dengan manager.removeListener(myListenerImpl)karena akan dihapus secara otomatis setelah pendengar Anda atau komponen Anda memegang pendengar menjadi tidak tersedia.
Tentu saja Anda masih dapat menghapus pendengar Anda secara manual, tetapi jika Anda tidak atau Anda melupakannya, itu tidak akan menyebabkan kebocoran memori, dan itu tidak akan mencegah pendengar Anda menjadi sampah yang dikumpulkan.
Dari mana datangnya WeakHashMapgambar itu?
Registri pendengar yang ingin menyimpan pendengar terdaftar sebagai WeakReferenceperlu koleksi untuk menyimpan referensi ini. Tidak ada WeakHashSetimplementasi di perpustakaan Java standar hanya WeakHashMaptetapi kita dapat dengan mudah menggunakan yang terakhir untuk "menerapkan" fungsi yang pertama:
Set<ListenerType> listenerSet =
Collections.newSetFromMap(new WeakHashMap<ListenerType, Boolean>());
Dengan ini listenerSetuntuk mendaftarkan pendengar baru Anda hanya perlu menambahkannya ke set, dan bahkan jika itu tidak dihapus secara eksplisit, jika pendengar tidak lagi direferensikan, itu akan dihapus secara otomatis oleh JVM.