相关疑难解决方法(0)

听众作为弱点的利弊

将听众保持为WeakReferences的利弊是什么.

当然,最大的'专业'是:

将侦听器添加为WeakReference意味着侦听器不需要打扰"删除"自身.

更新

对于那些担心只有对象引用的侦听器,为什么有2个方法,addListener()和addWeakRefListener()?

那些不关心去除的人可以使用后者.

java design-patterns weak-references observer-pattern

70
推荐指数
5
解决办法
2万
查看次数

匿名监听器是否与弱引用不兼容?

我正在读这个被问到的问题:避免回调中的内存泄漏?

我很困惑,直到有人回答以下问题:

"这种方法的问题是你不能有一个只在集合中引用的监听器,因为它会随机消失(在下一个GC上)"

我是否理解使用弱引用(如存储在WeakHashMap中)与匿名侦听器不兼容?

我通常传递这样的听众:

public static void main(String[] args) {
    final Observable obs = new SomeObservable();
    obs.addObserver(new Observer() {
        public void update(final Observable o, final Object arg) {
            System.out.println("Notified");
        }
    });
    obs.notifyObservers();
    ... // program continues its life here
}

private static final class SomeObservable extends Observable {

    @Override
    public void addObserver(final Observer o) {
        super.addObserver(o);
        setChanged(); // shouldn't be done from here (unrelated to the question)
    }

}
Run Code Online (Sandbox Code Playgroud)

我使用CopyOnWriteArrayList跟踪侦听器(上面的默认Observable显然使用了一个旧的Vector,但它只是一个示例来说明我通常如何创建一个匿名类来用作侦听器). …

java garbage-collection callback anonymous-methods

17
推荐指数
2
解决办法
1685
查看次数