2014-12-23 4 views
1

В section 8.1.1 Class Modifiers of the Java Language Specification 8 говорится, что:Задания более одного класс модификатора

ClassModifier: один из
        Аннотация общественности защищен частный абстрактного статического окончательного strictfp

Но мне удалось составят следующее:

public strictfp A{} 

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

+3

Вы прочитали три строки перед тем, что вы вставили? «Объявление класса может включать модификаторы классов. ClassModifiers: ClassModifier ClassModifiers ClassModifier« – SMA

+0

Я уверен, что вы имели в виду java7, в java8 он не указывает, что – msrd0

+0

@ msrd0 java 8 JLS не имеет надстрочной строки. Обратитесь к [здесь] (http://docs.oracle.com/javase/specs/jls/se8/html/jls-8.html#jls-8.1.1). Таким образом, OP читает JLS SE 7 и принимает его за 8. – SMA

ответ

6

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

ClassModifiers: 
    ClassModifier 
    ClassModifiers ClassModifier <<== Here 

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

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

+0

Извините, мне нужно больше объяснений. Если я посмотрю на NormalClassDeclaration, он не считает ClassModifier не ClassModifers (т. Е. Множественное число). Пожалуйста, объясните, как я должен это прочитать. –

+0

@ I.K. '{' '}' означает «Ноль или более повторений ». Это стиль EBNF. Квадратные скобки '' '' ']' mean 'необязательный ". Странно, что они смешивают два стиля. – dasblinkenlight

+0

Спасибо. Понял. –

5

ClassModifiers Java Language Specification говорит именно:

ClassModifiers: 
    ClassModifier 
    ClassModifiers ClassModifier 

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

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

Смежные вопросы