2016-08-09 93 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