繁体   English   中英

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

[英]Syntax error , insert “EnumBody” to complete EnumDeclaration

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

我明白有错误。
但是当我将光标悬停在错误上时,我不明白错误消息。 此消息的含义是什么?

为什么它期待EnumBody

下面是截图。

在此处输入图片说明

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

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

开发人员可能知道这一点,但由于以下一项或多项原因而没有修复它:

  • 它不会经常发生,不足以被优先考虑。
  • 在不影响其他错误恢复情况的情况下,可能很难做得更好。
  • 任何更改都可能破坏1多个编译器错误回归测试。
  • 还有其他更高优先级的问题需要处理。

1 - Break ... 从某种意义上说,由于测试中的假设而不是被测试代码中的问题而导致测试失败。 修复这些回归可能会很麻烦。

对于它的价值,以下几点:

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;
    }
}

所以它正确地判断出我们不在枚举中,所以我们得到了上面的错误,但它没有意识到我们甚至不知道它是否是一个枚举。 你可以在这里查看源码:

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

即使我的代码是正确的,这也在 Eclipse 中发生在我身上。 发生的原因是我在没有先添加 jar(aspectJ JAR)的情况下编写了一些代码,并且在我添加了 JAR 之后,这个问题就出现了。

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

绝对是个奇怪的问题。 我知道代码是正确的,因为我是从一本书中复制它的(Spring in action 第 4 版 - 顺便说一句,很好读)。 无论如何,希望这对您或将来的某人有所帮助! 让我疯狂了大约一个小时

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM