无法将 Object 转换为 true 或实例为 true||Java Eclipse 插件开发



为什么我不能将用于获取包资源管理器选择的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()返回的用户界面对象通常不是IProjectIFileIResource的直接实例。

要获得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
 }

相关内容

最新更新