如果你选择了一些项目作为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
答案 0 :(得分:2)
从选择中获得的许多对象不会实现IProject
或IJavaProject
之类的内容,而是一些更适合代码想要呈现视图或编辑器的内部类。< / p>
在这种情况下,您无法使用强制转换,因为选择对象未实现所需的接口。
用户界面对象可以实现IAdaptable
,允许您使用object.getAdapter(...)
检索基础类。
然而,并非所有对象都自己实现IAdaptable
,而是使用registerAdapters
的{{1}}方法来声明一个完全不同的类,该类从UI对象转换为基础对象。在这种情况下,您使用
IAdapterManager
您可以使用以下实用程序方法来处理所有可能性:
IProject project = (IProject)Platform.getAdapterManager().getAdapter(object, IProject.class);