我对IAdaptable和相关类感到困惑。哪个类是适配器,适配器,适应类型?
[背景]
我有一个表/树查看器条目的上下文菜单。根据查看器中相应对象的状态(即表查看器中行的属性值),上下文菜单中的某些操作不得显示。
我可以使用plugin.xml中的配置实现此目的:
<extension
point="org.eclipse.ui.popupMenus">
<objectContribution
adaptable="false"
id="<some_id>"
objectClass="<object_class_of_viewer_entry>">
<visibility>
<objectState name="buildable" value="true"/>
</visibility>
<action
class="<my_action_class>"
但是,这仅在对象类实现org.eclipse.ui.IActionFilter时才有效。
[问题]
我的对象类无法实现IActionFilter,我不想更改其界面。因此,我需要使用IAdaptable机制解决这个问题。
阅读Eclipse文档让我对术语(适配器,适配器,适应类型)感到困惑,我仍然对如何处理我的问题感到困惑。
对象类(在上面的配置中引用)必须保持不变。
我的方法如下。
<extension
point="org.eclipse.core.runtime.adapters">
<factory
adaptableType="<object_class_of_viewer_entry>"
class="MyFactory">
<adapter
type="org.eclipse.ui.IActionFilter">
</adapter>
</factory>
</extension>
MyFactory是这样的:
public class MyFactory implements IAdapterFactory {
private static final Class[] types = {
<object_class_of_viewer_entry>.class,
};
@Override
public Object getAdapter(Object adaptableObject, Class adapterType) {
return new <class_that_implements_IActionFilter>((<object_class_of_viewer_entry>) adaptableObject);
}
@Override
public Class[] getAdapterList() {
return types;
}
}
这有什么不对?我在哪里错过了什么?
答案 0 :(得分:0)
结果一切,好吧,几乎所有事情都是正确的。我简单地在plugin.xml中混合了object_class_of_viewer_entry的接口和实现。
两篇有帮助的文章:http://www.eclipsezone.com/articles/what-is-iadaptable/和http://wiki.eclipse.org/FAQ_How_do_I_use_IAdaptable_and_IAdapterFactory%3F