2010-01-24 46 views
9

我可以聲明下列包修飾,但它似乎並沒有對任何事情有任何影響:爲什麼修飾符被允許用於一個包時,他們似乎什麼都不做?

private public protected static final package com.stackoverflow.mangodrunk 

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

所以我的問題是,沒有一包decleration前添加修飾符做任何事情,爲什麼會是編譯器允許嗎?

更新:似乎是與Eclipse捆綁在一起的編譯器的問題,正如其他人提到的那樣,這是使用Sun JDK的編譯器錯誤。

+0

哇靠,你是對的,Eclipse編譯器編譯這只是罰款.... – skaffman 2010-01-24 16:17:23

+0

這是一個相當小錯誤,但如果你想舉報它,你可以在這裏做:https://bugs.eclipse.org/bugs/ – McDowell 2010-01-24 16:43:08

回答

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 
+0

我使用的是JDK 1.6.0_17,並且您是正確的,但在嘗試使用javac編譯它時出現編譯器錯誤。但在日食下沒有問題。 – mangoDrunk 2010-01-24 16:10:30

+1

關於Eclipse JDK有何說法? – duffymo 2010-01-24 16:14:09

+0

可能是他們語法中的一個小錯誤,導致它忽略*任何*之前「包裝」不只是評論?查看是否也忽略了其他關鍵字。我想你應該報告錯誤,除非它已經被報告。 – Draemon 2010-01-24 16:22:03

4

根據JLS,唯一可以在package之前的是註釋。

PackageDeclaration: 
     Annotationsopt package PackageName ; 

但是註釋是這樣的(略去了完整的語法):

NormalAnnotation: 
     @ TypeName (ElementValuePairsopt) 

所以你的編譯器不應該被允許標準的訪問修飾符。

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