关于this的WeakListeners
文档,我发现该代码已被删除:
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上找不到任何东西。
我检查了您链接的文档。再往下说:
它本身从源代码的实现中被强烈引用(例如,从其EventListenerList中引用)
为您提供可以在此处使用的类的示例。确实在
的文档中WeakListeners.change (listener, source)
源是一个对象,因此它可以是您用作事件源的任何对象。如果您继续阅读文档,则会看到:
它试图从源中注销自己。这就是为什么它需要引用注册源的原因。取消注册是使用反射完成的,通常是从源中查找方法并调用它。
和
如果源没有预期的remove *方法和/或您对源提供了错误的引用,则可能会失败。在这种情况下,弱监听者实例将保留在内存中并由源注册,而监听者和观察者将被释放。
所以我想您将需要使用带有某种remove方法的接口。
我浏览了Javadoc索引,并找到了这个(MenuBar)作为我认为您正在寻找的示例。
希望这会有所帮助。
干杯!