2016-08-09 64 views
-1

ich diesen Code haben mit parametrisierte Schnittstellen:IDE erwartet nach geschweiften Klammern Semikolon

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

Warum hat die IDE erwarten ein „;“ nach dem zurückkehrenden Typ (ReaderType) von getType()?

Die IDE platziert ein ";" nach der öffnenden Klammer der Klasse:

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

Warum hat die IDE (Eclipse-in diesem Fall) erzeugt die „;“ nach der Enum-Deklaration und Anzeige eines "expected"; "nach dem Rückgabetyp anstelle eines" fehlenden Members "?

Antwort

2

Sie deklarieren eine enum, keine Klasse, daher erwartet der Compiler am Anfang enum-Elemente. Diese Elemente sollten von , und Ende mit einem ;

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

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

Selbst getrennt werden, wenn Sie keine enum Elemente erklären, die ; ist obligatorisch.

Beachten Sie, dass, wenn Sie nicht erklären, ein Verfahren in die enum, die ; kann entfallen.

public enum CLIError { 
    // compiles without ; 
} 

oder

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

Aber warum würde der Fehler "erwartet werden"; nach dem Typ? Ich weiß, es ist eine enum, ich weiß, dass die Fehler Markup verschwinden würde. Aber warum dieser vage Fehler? Warum das automatisch generierte ";" – gismo

+0

@gismo ';' 'wird nicht nach dem Typ erwartet, sondern vor der ersten Methode. Dies ermöglicht dem Compiler, zwischen Aufzählungselementen und Methoden zu unterscheiden. – noscreenname

1

Sie definiert einen enum. In einer enum müssen Sie Enum-Konstanten definieren, bevor Sie Methoden definieren. Wenn Sie keine Konstanten definieren, müssen Sie dort ein Semikolon einfügen.

Dies ist nur, wie die Syntax von Aufzählungen für Java definiert ist, siehe section 8.9 der Java Language Specification.