我通过在e4应用程序中扩展Composite类来创建自己的复合合成。
然后我重写了dispose方法,但它永远不会被调用。但是,如果我在复合合成或其包含的任何小部件上添加一个dispose侦听器,则会调用它。
有人可以解释我的原因吗?
这是一个例子。
public class MyComposite extends Composite{
public MyComposite(){
this.addDisposeListener(new DisposeListener(){
@Override
public void widgetDisposed(DisposeEvent e) {
System.out.println("This get printed");
}
});
}
@Override
public void dispose(){
System.out.println("This is not printed");
super.dispose();
}
}
我已经阅读了dispose方法的javadoc,它说:
注意:此方法不会在接收器的后代上递归调用。这意味着,窗口小部件实现者无法通过重新实现此方法来检测窗口小部件何时被处置,而是应该侦听Dispose事件。
对于我看到的行为和上面的javadoc,似乎dispose方法不能被覆盖,因为它被忽略。这种解释是否正确?
答案 0 :(得分:4)
对于我看到的行为和上面的javadoc,似乎dispose方法不能被覆盖,因为它被忽略。这种解释是否正确?
“无法覆盖”太强大,因为从技术上讲,你可以覆盖它,但基本上你是正确的。如你所见,覆盖它没有达到预期的效果。
要处理Composite中的处理,DisposeListener是正确的方法。另请参阅此问题:Eclipse RCP: How and when to correctly unsubscribe a Composite from EventBroker?