【问题标题】:Specifying more than one class modifier指定多个类修饰符
【发布时间】:2014-12-23 11:24:55
【问题描述】:

section 8.1.1 Class Modifiers of the Java Language Specification 8 中,它声明:

ClassModifier:其中之一
注解 public protected private abstract static final strictfp

但我设法编译了以下内容:

public strictfp A{}

也就是说,它声明应该选择一个类修饰符,但我可以选择多个。我在这里误解了规范吗?

【问题讨论】:

  • 您在粘贴之前阅读了三行内容吗? "一个类声明可能包含类修饰符。ClassModifiers: ClassModifier ClassModifiers ClassModifier"
  • 我确定你的意思是 java7,在 java8 中并没有说明
  • @msrd0 java 8 JLS 没有上述行。请参阅here 所以 OP 正在读取 SE 7 的 JLS 并假设它为 8。
  • @almasshaikh 我知道,我读过,这就是为什么我认为 OP 意味着 Java7
  • 在 pdf 版本中确实有该行。

标签: java


【解决方案1】:

答案就在上面的规则中:

ClassModifiers:
    ClassModifier
    ClassModifiers ClassModifier <<== Here

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

本质上,该规则说您可以在ClassModifiers 列表中使用一个或多个ClassModifiers。 “一个或多个”的迭代概念的这种递归定义对于 BNF 样式的语法描述很常见(与 EBNF 不同,EBNF 为重复提供了一种特殊的语法)。

【讨论】:

  • 对不起,我需要更多解释。如果我查看 NormalClassDeclaration,它会声明 {ClassModifier} 而不是 ClassModifers(即复数)。请解释我应该如何阅读。
  • @I.K. { } 表示“ 的零次或多次重复”。这是 EBNF 风格。方括号 [ ] 表示“可选的 ”。奇怪的是,他们混合了这两种风格。
【解决方案2】:

ClassModifiers Java Language Specification 准确地告诉你:

ClassModifiers:
    ClassModifier
    ClassModifiers ClassModifier

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

所以它在类之前是 1 个或多个 ClassModifier

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-12
    • 1970-01-01
    相关资源
    最近更新 更多