当实现弱监听器时,将监听器添加到哪种源类型? (Java)

问题描述 投票:0回答:1

关于thisWeakListeners文档,我发现该代码已被删除:

    private void registerTo(Source source) {
        listener = new Listener();
        source.addChangeListener(WeakListeners.change (listener, source));
    }

    private class Listener implements ChangeListener {
        public void stateChanged(ChangeEvent e) {
            doSomething();
        }

他们正在写的那个源对象是什么?我们在Google上找不到任何东西。

java listener netbeans-platform
1个回答
0
投票

我检查了您链接的文档。再往下说:

它本身从源代码的实现中被强烈引用(例如,从其EventListenerList中引用)

为您提供可以在此处使用的类的示例。确实在

的文档中
WeakListeners.change (listener, source)

源是一个对象,因此它可以是您用作事件源的任何对象。如果您继续阅读文档,则会看到:

它试图从源中注销自己。这就是为什么它需要引用注册源的原因。取消注册是使用反射完成的,通常是从源中查找方法并调用它。

如果源没有预期的remove *方法和/或您对源提供了错误的引用,则可能会失败。在这种情况下,弱监听者实例将保留在内存中并由源注册,而监听者和观察者将被释放。

所以我想您将需要使用带有某种remove方法的接口。

我浏览了Javadoc索引,并找到了这个(MenuBar)作为我认为您正在寻找的示例。

希望这会有所帮助。

干杯!

© www.soinside.com 2019 - 2024. All rights reserved.