JLS:package关键字之前的修饰符

时间:2014-01-27 14:40:58

标签: java eclipse package modifier jls

我刚刚发现在类中的包声明之前可以编写几个修饰符。似乎允许所有可见性修改器以及场修改器以及所有这些修改器多次。声明可能如下所示:

public public final static private private static protected
volatile synchronized strictfp strictfp static final package de.lfnn.test;

这可能意味着什么?

对于我来说,第一眼看来它似乎是语法上的胡言乱语。 JLS中的一些漏洞可以编译但不会以任何方式影响编译器。

(是的,我搜索过JLS和网络; - ))

更新:正如@a​​ssylias所指出的,JLS不允许这种结构。我试图用javac编译它,它失败了。然而,eclipse编译器允许它。

1 个答案:

答案 0 :(得分:2)

我不确定您在哪里阅读,但您提出的语法无效。 package declaration必须遵循以下语法:

  

PackageDeclaration:
  Annotations opt package PackageName ;

因此,您可以在package关键字之前添加注释,但就是这样。例如,public package a.b.c;不是有效语句,并使用javac生成以下编译错误(在jdk 8中):

Test1.java:5: error: class, interface, or enum expected
public package a.b.c;
1 error

注意:似乎public package a.b.c;编译了一些编译器。这看起来像一个bug,因为它与语言规范不符。