2014-12-27 85 views
0

我是Java新手,爲我的OCJP考試閱讀一本書。在本書中,它聲明的非靜態內部類只有聲明爲靜態最終時纔可以有靜態成員。但是當我嘗試創建容器類的static final object時出現編譯錯誤。在非靜態內部類中的靜態最終對象編譯錯誤

class Logger { 
    private Logger() { 
     // private constructor for singleton 
    } 

    public class LoggerHolder { // non static inner class 
     public static final int x =10; // No compile here 
     public static final Logger logger = new Logger(); //Compile error 
    } 

    //"The field logger cannot be declared static; static fields can only be declared in static or top //level types" 

    public static Logger getInstance() { 
     return LoggerHolder.logger; 
    } 
} 
+0

的'logger'在編譯時間,這就是爲什麼它是不允許知道。 – 2014-12-27 15:04:49

+0

Mhh,'Logger'和'Logger4' ...哪裏可能出現問題? – Tom 2014-12-27 15:20:27

+0

@湯姆哦...對不起,我的壞....那是複製粘貼錯誤。我現在編輯它... – 2014-12-27 20:49:34

回答

1

actual rule是靜磁場必須是常量變量 - 既final以及一個原始或Stringx很好,因爲int是原始的; Logger不是。

(什麼是書上說的只是有人的意見;對於確定的答案,你不能擊敗規範)

+0

偉大的答案和感謝您的鏈接。它現在有道理... – 2014-12-27 20:55:40