2016-08-09 90 views
-1

我有这样的代码与参数化接口后分号:IDE预计花括号

public enum CLIError implements IUIErrorEnum<CLIError>, IErrorEnum<CLIError> { 
    @Override 
    public ReaderType getType() { 
     return ReaderType.CLI; 
    } 

为什么IDE的期望“;”返回getType()的Type(ReaderType)之后?

IDE放置了一个“;”在该类的开头括号之后:

public enum CLIError implements IUIErrorEnum<CLIError>, IErrorEnum<CLIError> { 
; 
    @Override 

为什么IDE(Eclipse在这种情况下)生成“;”在枚举声明并显示“预期”之后;“在返回类型之后而不是”缺少成员“之后?

回答

2

您正在声明枚举而不是类,因此编译器希望在开始时看到枚举元素。这些内容应该由,和结束与;

public enum CLIError implements IUIErrorEnum<CLIError>, IErrorEnum<CLIError> { 
    ELEMENT_1, 
    ELEMENT_2, 
    LAST_ELEMENT; 

    @Override 
    public ReaderType getType() { 
     return ReaderType.CLI; 
    } 
} 

分开即使你不申报任何枚举元素时,;是强制性的。

需要注意的是,如果你不声明方法枚举,;可以省略。

public enum CLIError { 
    // compiles without ; 
} 

public enum CLIError { 
    ELEMENT_1, 
    ELEMENT_2, 
    LAST_ELEMENT 
    // compiles without ; 
} 
+0

但是为什么错误是“预期的”?类型后?我知道它是一个枚举,我知道错误标记会消失。但为什么这个模糊的错误?为什么自动生成“;” – gismo

+0

@gismo';'不是在类型之后,而是在第一个方法之前。这允许编译器区分枚举元素和方法。 – noscreenname

1

您定义的enum。在enum中,您必须在定义任何方法之前定义枚举常量。如果你没有定义任何常量,你必须在那里放一个分号。

这就是如何为Java定义枚举的语法,参见Java语言规范的section 8.9