为什么我不能将用于获取包资源管理器选择的Eclipse框架方法返回的Object类型的数组中的内容强制转换为IProject?instanceof返回false,不进行检查的强制转换会导致异常。但是调试器显示Object[]数组的内容,使其具有所有实例变量和IProject类型的所有内容:
private List<IProject> getValidSelectedProjects(IWorkbenchWindow window) {
final ISelectionService service = window.getSelectionService();
final IStructuredSelection structured = (IStructuredSelection) service.getSelection("org.eclipse.jdt.ui.PackageExplorer");
if (structured == null){
return null;
} else {
final Object[] selectedProjects = structured.toArray();
ArrayList<IProject> validatedProjects = new ArrayList<IProject>();
for (final Object projectObj : selectedProjects){
if (projectObj instanceof IProject){
IProject project = (IProject) projectObj;
//do something
}
//rest of the method; returning list of validated projects
我也试过如何在Java中转换Object[]和接口(IProject[])?
但在这一行我得到了一个例外:
System.arraycopy(objectarray, 0, projectarray, 0, objectarray.length);
getSelection()
返回的用户界面对象通常不是IProject
、IFile
或IResource
的直接实例。
要获得IProject
。。。使用IAdapterManager
:
IProject project = (IProject)Platform.getAdapterManager().getAdapter(projectObj, IProject.class);
有时对象不会直接向IProject
提供适配器,所以请尝试更通用的IResource
:
IResource resource = (IResource)Platform.getAdapterManager().adapt(projectObj, IResource.class);
if (resource instanceof IProject)
{
IProject project = (IProject)resource;
... your code
}