簡體   English   中英

無法從Object到IProject強制轉換或instanceof為true Java Eclipse插件開發

[英]Can't cast or instanceof to true from Object to IProject || Java Eclipse Plugin-Development

為什么不能將對象類型的數組(用於獲取選擇包瀏覽器的Eclipse框架方法返回)的內容轉換為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
 }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM