我有一个HashMap<MyClass,ArrayList<WeakReference<MyObject>>>
变量。
尽管从hashmap中清除了弱反射,但我还希望能够从HashMap中手动删除“MyObject”。这是一个中心侦听器对象。
当我将项目添加到链接到主hashmap键值的arraylist时,我使用.add(new WeakReference<MyObject>(owner))
当我想从外部地方删除“self”时,我发送“owner”作为真实对象的参数。那么如何从我的hashmap中手动删除这个对象呢?我可以使用从传入所有者参数生成的新WeakReference进行查询吗?旧"new WeakReference<MyObject>(owner)"
和新"new WeakReference<MyObject>(owner)"
是否相等?所以我可以从hashmap中删除它。
答案 0 :(得分:7)
将旧的“新WeakReference(所有者)”和新的“新” WeakReference(所有者)“相等?
不,它们不相等。两者都是不同的对象,并且在弱引用中不会覆盖equals
方法。所以它默认检查两个引用是否相等而不是。
建议:
Map<MyClass,Map<String,WeakReference<MyObject>>>
您可以将list
更改为map
,并在对象中使用某种 ID 类型的东西作为弱参考的键。当所有者调用时,使用该对象的ID删除弱引用。
答案 1 :(得分:6)
不,因为WeakReference
及其父Reference
类都不会覆盖equals()
方法。所以它继承了Object的equals()
方法,它只考虑两个对象是否相同,如果它们是同一个对象。
答案 2 :(得分:2)
显而易见的选择是沿着列表循环,并将目标objet与每个Reference(owner.equals(reference.get())
或owner == reference.get()
的指示对象进行比较,如果你检查的是两个变量都指向同一个对象)。