Невозможно привести проект затмения к IJavaProject - PullRequest
7 голосов
/ 10 июля 2011

У меня есть следующий код

    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")) {

Увы, я получаю «ClassCaseException» с указанием

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

Любая идеяЗачем?Я бы подумал, что как только IProject имеет Java-природу, он может быть преобразован в IJavaProject.Я не могу получить доступ к JDT Core API в данный момент, так как сервис недоступен здесь .

1 Ответ

21 голосов
/ 11 июля 2011

Код в вашем ответе не должен работать (опечатка?). Вот как вы можете создать IJavaProject:

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

IProject - это тип в Eclipse Resources API, а IJavaProject - это тип в Eclipse Java Model. Это не одни и те же абстракции, но все IJavaProjects имеют IProject.

...