语法错误,插入“EnumBody”以完成EnumDeclaration

时间:2012-11-01 07:55:41

标签: java eclipse syntax-error eclipse-indigo

我处于编码的中间,意外地将以下代码行放在我们声明实例变量的类的一部分。但我检查并且它在任何地方给出相同的错误我的意思是:在静态块内,构造函数内,任何类方法内。除非将private;作为它给出的类的第一行 当我们将光标悬停在它上面时,Syntax error, insert "EnumBody" to complete ClassBodyDeclarations(由@ chaitanya10在下面的评论中写,并且我在我的工作空间中验证)在eclipse工具提示中出错。

我知道有错误。
但当我将光标悬停在错误上时,我不明白错误消息。这条消息是什么意思?

为什么期待EnumBody

下面是截图。

enter image description here

3 个答案:

答案 0 :(得分:8)

要获得真正的解释,有人需要对语法检查以及Eclipse Java编译器前端的语法错误恢复和报告组件进行详细分析。但最可能的解释是,您的“异常”语法错误“混淆”了编译器的语法错误恢复代码。

简而言之,它是一个次要的编译器错误(或功能)。

开发人员很可能知道这一点,但是因为:

而没有修复它
  • 经常不会发生,
  • 可能很难做得更好......没有打破其他一些错误恢复案例和/或
  • 任何更改打破许多编译器错误回归测试。

答案 1 :(得分:5)

对于它的价值,以下内容:

public class Foo;

错误:Syntax error, insert "ClassBody" to complete ClassBodyDeclarations

public enum Foo;

错误:Syntax error, insert "EnumBody" to complete ClassBodyDeclarations

public interface Foo;

错误Syntax error, insert "InterfaceBody" to complete ClassBodyDeclarations

无论如何,我认为发生的事情是,在这个 org.eclipse.jdt.internal.compiler.parser.Parser.consumeEnumConstantHeader()中,它会在使用此代码获得解析错误时尝试恢复:

if(this.currentToken == TokenNameSEMICOLON) {
    RecoveredType currentType = currentRecoveryType();
    if(currentType != null) {
        currentType.insideEnumConstantPart = false;
    }
}

所以它正确地指出我们不在枚举中,所以我们得到如上所述的错误,但它没有意识到我们甚至不知道它是否是枚举。 You can look at the source here:

换句话说,它可能是Eclipse团队在添加Enumerations时引入的一个错误,它的处理方式与其他一些令牌略有不同,导致它以不同的方式被恢复,因此出现在编译器错误中

答案 2 :(得分:1)

即使我的代码是正确的,这也发生在Eclipse中。发生了,因为我写了一些代码而没有先添加jar(aspectJ JARs),在我添加了JAR后出现了这个问题。

首先,我复制了代码,删除了代码并将其粘贴回来,并认为在红线消失的情况下工作但是在运行时抛出了错误。然而,我确实通过删除类,重新创建它,并再次键入相同的确切代码来使其工作。删除类后,复制粘贴可能会起作用,但我输入以确定。

绝对是一个奇怪的问题。我知道代码是正确的,因为我正在将它从一本书中复制出来(Spring in action 4th edition - 一个很好的阅读顺便提一下)。无论如何,希望这可以帮助你或将来的某个人!让我疯狂了大约一个小时