我有一些类的实例来自SWT
Composite
。
这些实例注入了ContextInjectionFactory
。该课程的一个例子是:
public class MyTest extends Composite {
public MyTest(Composite parent, int style) {
super(parent, style);
}
@Inject
@Optional
private void doSomething(@UIEventTopic(EventConstants.TEST) Object unused) {
//do something
}
}
这就是我使用它的方式:
public createTestContent() {
MyTest myTest = new MyTest(composite, SWT.NONE);
ContextInjectionFactory.inject(myTest, context);
}
public someAction() {
composite.dispose();
}
如果我现在处理这些对象(通过处置它们的父对象),我希望不再调用示例代码中的方法doSomething。但事实上它仍然会被召唤。
为了阻止这种行为,我需要调用
ContextInjectionFactory.uninject(myTest, context);
有谁知道为什么会这样?
答案 0 :(得分:1)
使用@UIEventTopic
Eclipse必须记住该方法,以便在事件发生时可以调用它。 Eclipse继续记住并调用此方法,直到您在类实例上运行ContextInjectionFactory.uninject
。
这与处理SWT控件无关 - 只是释放控件使用的任何本机数据。
看起来处理ExtendedObjectSupplier
的{{1}}使用@UIEventTopic
来记住方法信息,因此有时可能会在内存紧张时处理数据。