可能重复:
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
来获得我需要的行为,但我仍然想要了解为什么常量会有不同的区别。我看到的唯一区别是第三个是一个数组,因此它的成员是可修改的,但似乎如果有的话会触发一个不同的错误。
答案 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既不是静态的,也不是顶级的。它适用于接口,因为它们无法直接实例化