为什么修饰符在它们似乎什么都不做的时候被允许?

时间:2010-01-24 15:59:52

标签: java eclipse

我可以使用修饰符声明以下包,但它似乎对任何内容都没有任何影响:

private public protected static final package com.stackoverflow.mangodrunk

// ...
class Whatever {
    // ...
}  

所以我的问题是,在包去除之前添加一个修饰符会做什么,为什么编译器会允许它?

更新:似乎与Eclipse捆绑在一起的编译器存在问题,正如其他人提到的那样,这是使用Sun JDK的编译器错误。

2 个答案:

答案 0 :(得分:7)

他们不是。您使用的是哪种编译器?

$ 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

答案 1 :(得分:4)

根据JLS,package之前唯一可以注释的是。

PackageDeclaration:
        Annotationsopt package PackageName ;

但注释看起来像这样(为简洁省略了完整的语法):

NormalAnnotation:
        @ TypeName ( ElementValuePairsopt )

因此,您的编译器不应该允许标准访问修饰符。

来源:http://java.sun.com/docs/books/jls/third_edition/html/packages.html