2014-12-23 4 views
1

section 8.1.1 Class Modifiers of the Java Language Specification 8에서, 그것은한다고 다음을 컴파일하십시오 :지정 이상의 클래스 수정

즉, 클래스 수정 자 중 하나를 선택해야한다고 나와 있지만 둘 이상을 선택할 수있었습니다. 여기서 사양을 잘못 해석합니까?

+3

붙여 넣기 전에 세 줄을 읽었습니까? 클래스 선언자는 클래스 수정자를 포함 할 수 있습니다. ClassModifiers : ClassModifier ClassModifiers ClassModifier " – SMA

+0

java7을 의미한다고 확신합니다. 해당하지 않습니다. – msrd0

+0

@ msrd0 java 8 JLS가 위의 라인을 가지고 있지 않습니다. [here] (http://docs.oracle.com/javase/specs/jls/se8/html/jls-8.html#jls-8.1.1)를 참조하십시오. 따라서 OP는 SE 7의 JLS를 읽고 8을 가정합니다. – SMA

답변

6

대답은 위의 규칙에 전에 1 이상 ClassModifier 중 하나입니다 : 기본적으로

ClassModifiers: 
    ClassModifier 
    ClassModifiers ClassModifier <<== Here 

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

, 규칙이 ClassModifiers 목록에 하나 이상의 ClassModifier을 사용할 수 있다고 말합니다. 이 "반복적 인"개념의 반복적 인 정의는 BNF 스타일의 구문 설명 (EBNF와는 달리 반복을위한 특별한 구문을 제공함)에 일반적입니다.

+0

죄송합니다. 더 자세한 설명이 필요합니다. NormalClassDeclaration을 보면 ClassModifers (즉, 복수형)가 아닌 {ClassModifier}가 나와 있습니다. 어떻게 읽어야하는지 설명해주십시오. –

+0

@ I.K. '{''}'는 "0이 (가) 더 이상 반복되지 않습니다. "을 의미합니다. 이것은 EBNF 스타일입니다. 대괄호'['']'은 "optional "을 의미합니다. 그것들이 두 가지 스타일을 섞는다는 것은 이상하다. – dasblinkenlight

+0

감사합니다. 알았다. –