假设我正在实施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
。
答案 0 :(得分:1)
您应该扩展org.eclipse.ui.part.EditorPart
而不是从头开始实施IEditorPart
。 EditorPart
及其超类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);
}