为什么Java允许嵌套类中的“public static final”用于简单类型而不是数组?

时间:2012-03-22 15:22:05

标签: java jls

  

可能重复:
  Cannot declare Public static final String s = new String(“123”) inside an inner class

在下面的示例中,为什么允许使用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来获得我需要的行为,但我仍然想要了解为什么常量会有不同的区别。我看到的唯一区别是第三个是一个数组,因此它的成员是可修改的,但似乎如果有的话会触发一个不同的错误。

1 个答案:

答案 0 :(得分: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既不是静态的,也不是顶级的。它适用于接口,因为它们无法直接实例化