【问题标题】:Syntax error: insert "enum Identifier", insert "EnumBody", inset "}"语法错误:插入“枚举标识符”,插入“EnumBody”,插入“}”
【发布时间】:2012-04-16 16:50:38
【问题描述】:

我编写了一个枚举类型,当我为它运行我创建的 JUnit 测试时会出现以下语法错误:

java.lang.Error: Unresolved compilation problems: 
    Syntax error, insert "enum Identifier" to complete EnumHeaderName
    Syntax error, insert "EnumBody" to complete EnumDeclaration
    Syntax error, insert "}" to complete ClassBody

我的枚举类型有静态函数,对于特定的字符串,它返回一个枚举常量。这是我的一些枚举类型的代码:

public enum MusicType {

    ACCIDENTAL, LETTER, OCTAVE, REST, DUR, CHORD, TUPLET;

    public static MusicType is_accidental(String a){
        if (a=="^" | a=="_"|a=="=")
            return ACCIDENTAL;
        else return null;
    }

}

我的其他静态函数非常相似(即is_letteris_octave 等),尽管有些使用input.matches(regex) 函数而不是检查输入是否等于特定字符串。

这里是 JUnit 测试的开始,它测试处理意外常量的函数:

public class MusicTypeTest {

    @Test
    public void accidentalTest(){
        String sharp = "^";
        String flat = "_";
        String natural = "=";
        assertEquals(MusicType.ACCIDENTAL, MusicType.is_accidental(sharp));
        assertEquals(MusicType.ACCIDENTAL, MusicType.is_accidental(flat));
        assertEquals(MusicType.ACCIDENTAL, MusicType.is_accidental(natural));
    }

}

我的 JUnit 测试中测试所有枚举静态函数的其他函数的编码类似。我无法弄清楚为什么会出现这些语法错误(这是我第一次编写枚举类型)。我一直在 Eclipse 中编码,目前还没有发现任何丢失的“}”。我不知道这是否与我编写测试的方式或我声明变量的方式有关。有谁知道我为什么会出现这些语法错误?

【问题讨论】:

  • 你不会错过一个结束},是吗?您只是没有将其粘贴到代码片段中,对吧?
  • 与你的问题没有直接关系,但是你需要写if (a.equals("^") || a.equals("_") || a.equals("="))而不是if (a=="^" | a=="_"|a=="="),或者更好的是if(a.matches("^[_=^]$"))
  • 没有右括号!我只是没有将其发布到代码片段中。也是的,你是绝对正确的:“==”应该是 .equals 或者我应该使用 .matches(regex)。
  • 如果您需要帮助,您必须添加完整的代码。上面的源文件都可以。当我从您的 MusicType 枚举中删除“}”时,我收到了 Syntax error, insert "}" to complete EnumBody MusicType.java /StackOverflow/src line 10 Java Problem,请添加类似的错误消息(当您选择错误并按 CTRL + C 时,您可以从 Eclipse 问题视图中复制这些消息)。

标签: java eclipse enums junit syntax-error


【解决方案1】:

您刚刚发布的枚举类型和类都有两个左大括号({)和一个右大括号(})。如果我不得不猜测,我会说您需要在每个文件的末尾再添加一个右大括号。

【讨论】:

  • 对不起,大括号在那里!我只是没有发布整个枚举/将它们排除在代码片段之外。抱歉!
  • @tkrishnan:这些错误很可能是由您未包含的文件的其他部分引起的。也许您应该尝试发布整个代码文件? (如果代码文件太大而无法在此处发布,请尝试从中删除代码,直到您有一个仍然可以重现错误的最低限度。如果您最终以这种方式消除了错误,那至少应该可以帮助您找出错误的位置问题是。)
【解决方案2】:

我在编写 Android 应用程序时遇到此错误。我所有的括号都关闭了;我正在关注来自不同站点的示例。我最终为我的代码选择了整个文本,剪切、保存并将代码粘贴回来。错误消失了。 Eclipse很可能卡住了……

【讨论】:

    【解决方案3】:

    Eclipse 也有同样的问题。错误的语法错误消息是由于放错了“;”注释后。

    【讨论】:

    • 我从下面的 junit 代码中得到了同样的错误信息。多么无用和误导性的错误消息……“WithMockUser(username="user", roles="role");"
    猜你喜欢
    • 2012-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-13
    • 1970-01-01
    • 1970-01-01
    • 2017-07-30
    • 1970-01-01
    相关资源
    最近更新 更多