Eclipse插件 - 使用Adapter而不是强制转换有什么好处?

时间:2014-10-23 13:19:25

标签: java eclipse casting eclipse-plugin adapter

如果你选择了一些项目作为IStructuredSelection,使用.toArray()获取他们的Object [] - 内容,那么为什么要将每个Object转换为IAdaptable然后再简单地再次投射到IJavaProject工作对我来说很好类和接口及其方法......

但是当使用(IJavaProject)adaptable.getAdapter(IJavaProject.class)时,一些接口方法会丢失?

适配器究竟做了什么(除了"返回一个对象,它是给定类参数的实例......")为什么每个人都建议使用它而不是强制转换?这是相关代码

    IAdaptable adaptable = (IAdaptable) selectedObject;
    IJavaProject javaProject = (IJavaProject) adaptable.getAdapter(IJavaProject.class);
    final IProject iProject = javaProject.getProject();
    iProject.refreshLocal(IResource.DEPTH_INFINITE, new NullProgressMonitor());
    final IJavaProject javaRefreshedProject = JavaCore.create(iProject);
    //processing further using ASTParser and CompilationUnit

1 个答案:

答案 0 :(得分:2)

从选择中获得的许多对象不会实现IProjectIJavaProject之类的内容,而是一些更适合代码想要呈现视图或编辑器的内部类。< / p>

在这种情况下,您无法使用强制转换,因为选择对象未实现所需的接口。

用户界面对象可以实现IAdaptable,允许您使用object.getAdapter(...)检索基础类。

然而,并非所有对象都自己实现IAdaptable,而是使用registerAdapters的{​​{1}}方法来声明一个完全不同的类,该类从UI对象转换为基础对象。在这种情况下,您使用

IAdapterManager

您可以使用以下实用程序方法来处理所有可能性:

IProject project = (IProject)Platform.getAdapterManager().getAdapter(object, IProject.class);