Eclipse:类型的层次结构与@Configurable注解不一致

36

我正在开发一个基于Spring/Vaadin/Hibernate的应用程序。

一切都正常,但是在Eclipse STS 2.8.1中仍然有以下错误标记:

The hierarchy of the type BankView is inconsistent
The hierarchy of the type AbstractEntityView is inconsistent

我有以下的视图结构:

public class BankView extends AbstractEntityView {  
    @Resource private BankService bankService;

    public void buildLayout() {
        super.buildLayout();

        // Use of the service here
    }
}

public abstract class AbstractEntityView extends AbstractView {  
    public void buildLayout() {
         verticalLayout = new VerticalLayout();
         verticalLayout.setSpacing(true);
         verticalLayout.setSizeFull();
         setContent(verticalLayout);
         super.buildLayout();
    }
}

@Configurable(preConstruction = true)
public abstract class AbstractView extends com.vaadin.ui.VerticalLayout {  
    public AbstractView() {
        super();
        try {
                buildLayout();
        }
        catch (AccessDeniedException e) { // Spring Security
                System.out.println("GTFO !");
        }
    }
}

这些错误标记是由什么引起的?


2
那个错误信息通常是由于错误的类路径引起的。尝试重新构建整个项目,这通常会给出更有用的错误提示。 - skaffman
首先,感谢你的回答 ;) 我已经尝试构建它,但什么也没有改变。我尝试了项目 > 清除...但没有用。 在我的类路径中,我尝试更改库的顺序,但仍然没有改变 :/ - c4k
14个回答

50
在我的情况中,我发现Eclipse中的“类型层次结构不一致”错误是由一个JAR文件类引用了一个在构建路径中不存在的类,而我正是在扩展这个类。因此如果你有:
// in other.dep.jar
class FromOtherDepJar {}

// in dep.jar
class FromDepJar extends FromOtherDepJar {}

// in the current project
class ProblematicClass extends FromDepJar {}
如果项目的classpath中有dep.jar,但没有other.dep.jar,在Eclipse中会显示The hierarchy of the type ... is inconsistent错误信息。在Eclipse的问题视图中查看,描述列比悬停提示更详细地说明了实际的问题。

我在尝试使用Fitnesse教程时遇到了“类型GreetTheWorldFixture的层次结构不一致”的问题,结果发现我的项目类路径中缺少fitnesse.jar文件,感谢您的答案! - Sinisha Mihajlovski
1
@GáborLipták 链接已删除,如果我没记错的话,它指出了问题的相同原因。 - Alex

1
重新配置构建路径以解决问题。

1

你尝试过关闭并重新打开Eclipse吗?有时候会有帮助。我的Eclipse(可能是因为我使用的是Windows平台)经常出现这样的错误,唯一的解决方法就是退出Eclipse,稍后重新打开。


1
事实上,问题是因为我将AbstractListView标记为@Configurable。当我在最终类(例如BankView)上放置此注释时,所有错误都消失了。
感谢大家的帮助。如果有人遇到相同的错误,他们会在不同的答案中找到解决方案。

你在 AbstractListView 类上保留了 @Configurable 吗? - VinyJones

1
另一个原因是引用了存在但未被导入或完全限定的不同包中的超类或超接口。这发生在我使用Eclipse重构移动继承自嵌套接口的抽象类之后。移动后,所有的子类都显示“类型X的层次结构不一致”的消息。问题通过手动导入已移动的抽象类中解决。

1
我的问题在于类/ JAR 文件被手动重新编译,使用 ant 和 gradle 任务在 Eclipse 之外。在 Eclipse 中刷新所有项目并重新构建可以使错误消失。

0
我通过添加javax.servlet-api-3.0.1.jar解决了这个问题。我的开发工具是Eclipse,但我的项目是在MyEclipse下开发的,当我将项目导入到Eclipse中时,它会抛出“类型SysUserFilter的层次结构不一致”的错误,所以我认为MyEclipse自动提供了javax.servlet-api-3.0.1.jar,但Eclipse没有,因此需要手动导入。

0
可能您的Maven依赖项未被识别。请检查是否已为此特定项目启用了Maven。 在Eclipse中,可以通过右键单击项目并选择Maven->启用Maven依赖项来激活Maven。

0
我通过在 Build Path 中删除所有jarsReferenced Libraries,然后重新在 Eclipse IDE 中添加所有 jars 来解决了这个错误 The hierarchy of the type ServiceController is inconsistent 的问题。

0

当两个外部库使用了不同版本的支持库时,也会出现此错误,即android-support库不匹配。解决方法是将它们变成相同的版本,可以通过删除其中一个库并将另一个第三方库中的支持库复制到该库中来实现。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接