2011-07-10 2 views
7

に日食プロジェクトをキャストすることはできません私は私がやろうとしていますどのような次のコードがIJavaProject

IJavaProject targetProject = null; 
    IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot(); 
    for (IProject project : root.getProjects()) { 
     if (project.getName().equals(projName)) { 
      try { 
       if (project.hasNature("org.eclipse.jdt.core.javanature")) { 
        targetProject = (IJavaProject) project; 
       } 
      } catch(...) { 
      // etc ... 
      } 

を持っている本質的IJavaProjectとして特定の名前と一致するプロジェクトを返しています。あなたが見ることができるように、私は問題のプロジェクトが呼び出すことにより、Javaの本質を持っていることを確認するチェック:

if (project.hasNature("org.eclipse.jdt.core.javanature")) { 

ああ、私はすべてのアイデア、なぜ

java.lang.ClassCastException: 
    org.eclipse.core.internal.resources.Project cannot be cast to org.eclipse.jdt.core.IJavaProject 

を知らせる「ClassCaseException」を取得しますか?私は、IProjectがJavaの性質を持つと、IJavaProjectにキャストできると思っていたでしょう。サービスが利用できないため、現時点でJDT Core APIにアクセスすることはできませんhere

答えて

21

答えのコードは正しく機能しません(誤植?)。ここでは、IJavaProjectを作成する方法を次のとおりです。

import org.eclipse.jdt.core.JavaCore 
... 
    if (project.hasNature(JavaCore.NATURE_ID)) { 
     targetProject = JavaCore.create(project); 
    } 

IProjectは、EclipseリソースAPIのタイプで、IJavaProjectは、EclipseのJavaモデルではタイプです。それらは同じ抽象ではありませんが、すべてのIJavaProjectにはIProjectがあります。

+0

はいそれはタイプでした。 – Joeblackdev

関連する問題