При реализации интерфейса в перечислении почему eclipse автоматически ставит точку с запятой перед переопределением метода интерфейса? - PullRequest
1 голос
/ 18 марта 2020

У меня есть interface и enum

Я реализую interface в enum

Я использую eclipse в качестве своей IDE

Ниже мой interface файл -

ITrafficSignal.java ->

public interface ITrafficSignal {
    public void showAction();
}

Ниже мой enum файл -

ETrafficSignal.java - ->

public enum ETrafficSignal implements ITrafficSignal {
    ;

    @Override
    public void showAction() {

    }
}

здесь ; в строке 2 автоматически подставляется eclipse

Если я уберу ;, то в method будет implemented -

public void showAction()

имеет красную линию ниже keyword void, и ошибка говорит -

Multiple markers at this line 
- implements ITrafficSignal.showAction
- Syntax error on token "void", volatile expected

Я не могу понять это .

1 Ответ

3 голосов
/ 18 марта 2020

Это просто синтаксис типов enum. С §8.9 Типы перечислений Java Спецификация языка :

EnumDeclaration:
  {ClassModifier} enum TypeIdentifier [Superinterfaces] EnumBody 

А синтаксис EnumBody:

EnumBody:
  { [EnumConstantList] [,] [EnumBodyDeclarations] }

EnumConstantList:
  EnumConstant {, EnumConstant}

EnumConstant:
  {EnumConstantModifier} Identifier [( [ArgumentList] )] [ClassBody]

EnumConstantModifier:
  Annotation

И, наконец, синтаксис EnumBodyDeclarations выглядит следующим образом:

EnumBodyDeclarations:
  ; {ClassBodyDeclaration} 

Как видно из приведенного выше, перечисление Декларации тела должны предшествовать точка с запятой (;), отделяющая его от констант enum. В отличие от EnumConstantList точка с запятой не является обязательной 1 . Это означает, что точка с запятой должна присутствовать, если есть объявления тела перечисления независимо от того, были ли объявлены какие-либо константы перечисления, хотя лично я не вижу смысла в том, чтобы иметь тип перечисления без констант.


1. Весь EnumBodyDeclarations является необязательным, но это означает, что если нет объявлений тела, то точка с запятой может быть опущена.

...