2012-03-22 41 views
3

可能重複:
Cannot declare Public static final String s = new String(「123」) inside an inner class爲什麼Java允許嵌套類中的「public static final」用於簡單類型而不是數組?

在下面的例子,爲什麼CONST_ONE,CONST_TWO允許的,但CONST_THREE與錯誤標記 「內部類不能有靜態聲明」?

package com.myco.mypack; 

public final class Constants { 

    public final class GroupOne { 
     public static final String CONST_ONE = "stuff"; 
     public static final int CONST_TWO = 2; 
     public static final int[] CONST_THREE = new int[]{3}; 
    } 

    public static final int[] CONST_FOUR = new int[]{4}; 
} 

我能得到我需要使用public interface GroupOne而不是行爲,但我還是想理解爲什麼常數treatly不同。我看到的唯一區別是,第三個是一個數組,因此它的成員是可修改的,但似乎會觸發不同的錯誤,如果有的話。

+3

它已被回答。基本上只允許編譯時常量字段。參考:http://stackoverflow.com/questions/4725505/cannot-declare-public-static-final-string-s-new-string123-inside-an-inner – Andrejs 2012-03-22 15:28:32

+0

這看起來像一個重複的問題,謝謝。 – 2012-03-22 15:35:12

回答

1

需要注意的一點是您的內部類(GroupOne)依賴於父類(常量),因爲您已將其定義爲public final class GroupOne。我懷疑如果你將它定義爲public static final class GroupOne它會適用於你。

編譯器錯誤消息應該告訴你:

the field CONST_THREE cannot be declared static; static fields can only be declared in static or top level types 

在你的情況,GroupOne既不是一成不變的,也不是頂級水平。它適用於接口,因爲它們不能直接實例化。

+0

是的,你說得對。我嘗試了一些變化,並且可以發誓我已經嘗試過那個......但顯然不是! – 2012-03-22 15:37:29

相關問題