Указание более одного модификатора класса

1

В разделе 8.1.1 Модификаторы классов спецификации языка Java 8 говорится, что:

ClassModifier: один из
Аннотация аннотация public protected private abstract static final strictfp

Но мне удалось скомпилировать следующее:

public strictfp A{}

То есть, он указывает, что один из модификаторов класса должен быть выбран, но я смог выбрать более одного. Я неверно истолковал здесь спецификацию?

  • 3
    Вы прочитали три строки перед тем, что вставили? «Объявление класса может включать в себя модификаторы класса. ClassModifiers: ClassModifier ClassModifiers ClassModifier»
  • 0
    Я уверен, что вы имели в виду java7, в java8 это не означает, что
Показать ещё 3 комментария
Теги:

2 ответа

6
Лучший ответ

Ответ приведен в правиле выше:

ClassModifiers:
    ClassModifier
    ClassModifiers ClassModifier <<== Here

ClassModifier: one of
    Annotation public protected private abstract static final strictfp

По сути, в правиле говорится, что вы можете использовать один или несколько ClassModifier в списке ClassModifiers. Это рекурсивное определение итеративной концепции "один или несколько" является общим для описания синтаксиса стиля BNF (в отличие от EBNF, которые обеспечивают специальный синтаксис повторений).

  • 0
    Извините, мне нужно больше объяснений. Если я смотрю на NormalClassDeclaration, он говорит, что {ClassModifier} не ClassModifers (то есть множественное число). Пожалуйста, объясните, как я должен это читать.
  • 0
    @IK { <что-то> } означает «Ноль или более повторений <что-то>». Это стиль EBNF. Квадратные скобки [ <что-то> ] означают «необязательный <что-то>». Странно, что они смешивают два стиля.
5

Спецификация языка Java ClassModifiers точно определяет:

ClassModifiers:
    ClassModifier
    ClassModifiers ClassModifier

ClassModifier: one of
    Annotation public protected private
    abstract static final strictfp

Таким образом, это либо 1, либо более ClassModifier перед классом

Ещё вопросы

Сообщество Overcoder
Наверх
Меню