我处于编码的中间,意外地将以下代码行放在我们声明实例变量的类的一部分。但我检查并且它在任何地方给出相同的错误我的意思是:在静态块内,构造函数内,任何类方法内。除非将private;
作为它给出的类的第一行
当我们将光标悬停在它上面时,Syntax error, insert "EnumBody" to complete ClassBodyDeclarations
(由@ chaitanya10在下面的评论中写,并且我在我的工作空间中验证)在eclipse工具提示中出错。
我知道有错误。
但当我将光标悬停在错误上时,我不明白错误消息。这条消息是什么意思?
为什么期待EnumBody
?
下面是截图。
答案 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 - 一个很好的阅读顺便提一下)。无论如何,希望这可以帮助你或将来的某个人!让我疯狂了大约一个小时