[英]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()
返回的用戶界面對象通常不是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
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.