Kasus lain yang bermanfaat untuk WeakHashMap
dan WeakReference
adalah implementasi pendengar .
Ketika Anda membuat sesuatu yang ingin mendengarkan acara tertentu, biasanya Anda mendaftarkan pendengar, misalnya
manager.registerListener(myListenerImpl);
Jika manager
toko 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 WeakHashMap
gambar itu?
Registri pendengar yang ingin menyimpan pendengar terdaftar sebagai WeakReference
perlu koleksi untuk menyimpan referensi ini. Tidak ada WeakHashSet
implementasi di perpustakaan Java standar hanya WeakHashMap
tetapi kita dapat dengan mudah menggunakan yang terakhir untuk "menerapkan" fungsi yang pertama:
Set<ListenerType> listenerSet =
Collections.newSetFromMap(new WeakHashMap<ListenerType, Boolean>());
Dengan ini listenerSet
untuk 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.