Почему константы перечисления должны быть неквалифицированными в случаях переключения в java? [дубликат]

Немного контекста. Речь идет о проблеме с квалифицированными именами перечислений в случаях переключения, как в примере:

      enum MyEnum {
    A,
    B,
    ;
}
      switch(methodReturnungMyEnum()){
case MyEnum.A:
    // ...
    break
case MyEnum.B:
    // ...
    break
}

что дает ошибку компилятора

Метка регистра переключателя перечисления должна быть неполным именем константы перечисления.

Ага. Решение простое: удалить MyEnum.часть. Это не мой вопрос.

Мне просто было интересно, почему это вообще запрещено . Я знаю, что однозначно ответить, почему что-то было сделано определенным образом, в принципе невозможно . Вместо этого я хочу узнать о причинах, которые могли стать причиной этого решения. Чем отличаются квалифицированные и неквалифицированные константы перечисления (или, возможно, символы в целом)? И что могло пойти не так, если бы компилятор все равно позволял это?

Хотя существует довольно много вопросов о том, как исправить ошибку компилятора, никто, похоже, не отвечает на эти вопросы.

1 ответ

Решение

Настоящий тип перечисления определяется в switch Тогда для каждого предложения компилятор должен только проверить, существует ли литерал в этом перечислении.

Если вы разрешите указывать квалифицированных (полностью квалифицированных и т. Д.) В case Тогда компилятор должен выполнить бесполезный шаг (проверить, является ли символ членом данного перечисления).

Это причина, по которой это не то же самое, что сказать «нет» (что может показаться на первый взгляд).

Технически это ограничение рассматривается здесь и объясняется здесь .

Другие вопросы по тегам