2012-03-22 45 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

相关问题