RCP 覆盖未调用复合处理方法

RCP overrided Composite dispose method not called

我通过在 e4 应用程序中扩展 Composite class 创建了自己的复合组合。

然后我重写了 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 方法,因为它被忽略了。这个解释正确吗?

For the behaviour i am seeing and the javadoc above, seems that the dispose method can not be override because it is ignored. Is this interpretation correct?

"Can not be overridden" 太强了,因为从技术上讲你可以覆盖它,但基本上你是正确的。如您所见,覆盖它不会产生预期的效果。

要处理 Composite 中的处置,DisposeListener 是正确的方法。另见这个问题: