如何正确实现IAdaptable?

时间:2014-01-26 18:55:43

标签: java eclipse eclipse-plugin adapter

假设我正在实施IAdaptable。例如,我正在实施IEditorInput,这需要这个。

在实施中写些什么?这里org.eclipse.core.runtime.adapters的作用是什么?我不需要Eclipse API的帮助来从我自己的方法实例化Adapter。那么,我需要使用它吗?

更新

文档中说:

Editor input must implement the IAdaptable interface; extensions are managed by the platform's adapter manager.

我无法理解这意味着什么。要么我在IAdapterFactory实现中编写实例化代码,要么我将在IEditorInput实现中编写它。

我不能同时做到这两点。

如果我写

class MyClass implements IEditorInpit {
   MyClassAdapter adapter = null;

   @Override
   public Object getAdapter(Class adapter) {

      if( adapter == MyClassAdapter.class ) {
         if( adapter == null ) {
             adapter = new MyClassAdapter(this, /// instantiation code
         }
         return adapter;
      }

      return null;
   }

}

然后永远不会使用org.eclipse.core.runtime.adapters

2 个答案:

答案 0 :(得分:1)

您应该扩展org.eclipse.ui.part.EditorPart而不是从头开始实施IEditorPartEditorPart及其超类WorkbenchPart为你做了很多工作。

您只需要扩展WorkbenchPart.getAdapter方法来执行特定的操作,例如编辑器的内容大纲页面;

@Override
public Object getAdapter(Class adapter)
{
   if (adapter == IContentOutlinePage.class)
     return yourContentOutlinePage;

   return super.getAdapter(adapter);
}

始终为您未提供的课程调用super.getAdapter(adapter)

需要您在getAdapter中提供内容的API文档确实清楚了。

默认实现:

return Platform.getAdapterManager().getAdapter(this, adapter);

答案 1 :(得分:0)

好的,答案是在PlatformObject实施中,它是

public Object getAdapter(Class adapter) {
    return AdapterManager.getDefault().getAdapter(this, adapter);
}

或此类doc(here):

 public Object getAdapter(Class adapter) {
     IAdapterManager manager = ...;//lookup the IAdapterManager service         
     return manager.getAdapter(this, adapter);
 }