当一个包似乎没有做任何事情时,为什么允许使用修饰符?
我可以使用修饰符声明以下包,但它似乎对任何事情都没有任何影响:
private public protected static final package com.stackoverflow.mangodrunk // ... class Whatever { // ... }
所以我的问题是,在包去除之前添加一个修饰符会做什么,为什么编译器会允许它?
更新 :似乎与Eclipse捆绑在一起的编译器存在问题,正如其他人提到的那样,这是使用Sun JDK的编译器错误。
他们不是。 你在用哪个编译器?
$ javac com/stackoverflow/mangodrunk/Whatever.java com/stackoverflow/mangodrunk/Whatever.java:1: class, interface, or enum expected private public protected static final package com.stackoverflow.mangodrunk; ^ 1 error
根据JLS, package
之前唯一可以是注释。
PackageDeclaration: Annotationsopt package PackageName ;
但是注释看起来像这样(为简洁省略了完整的语法):
NormalAnnotation: @ TypeName ( ElementValuePairsopt )
因此,您的编译器不应该允许标准访问修饰符。
资料来源: http : //java.sun.com/docs/books/jls/third_edition/html/packages.html