3

可能重复:
无法在内部类中声明 Public static final String s = new String(“123”)

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

4

1 回答 1

1

需要注意的一点是您的内部类 (GroupOne) 取决于父类 (Constants),因为您将其定义为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 既不是静态的,也不是顶级的。它适用于接口,因为它们不能直接实例化

于 2012-03-22T15:31:32.667 回答