仅在常量变量声明中允许使用静态修饰符

2022-09-01 15:30:12

我有一个内部类,用于存储我用于游戏的控件的信息,现在我想在其中存储一个静态 ArrayList,其中包含控件的所有名称。但是我得到这个错误:“只在常量变量声明中允许使用静态修饰符”

private class Control{
    public static ArrayList<String> keys = new ArrayList<String>();
    public final String key;
    public final Trigger trigger;
    Control(String k, Trigger t){
        key = k;
        trigger = t;
        
        keys.add(key);
    }
}

现在我知道这可以通过从类中取出ArrayList并将其存储在主类中来轻松解决。但我更喜欢将所有信息保存在一个可以访问所有内容的类中。

“Control.key, Control.trigger, Control.keys”“key, trigger, keys” 更优雅/可读

或者也许我只是有强迫症,我仍然想按照自己的方式去做。


答案 1

可以将类设置为静态。Control

private static class Control {
        ^^^^^^

    // Ok to have static members:
    public static ArrayList<String> keys = new ArrayList<String>();

    ...

这在 Java 语言规范第 §8.1.3 节中进行了描述。

8.1.3 内部类和封闭实例

内部类是未显式或隐式声明为静态的嵌套类。内部类不能声明静态初始值设定项 (§8.7) 或成员接口。内部类不能声明静态成员,除非它们是编译时常量字段 (§15.28)。


答案 2

使你的内部类成为静态的,它将起作用:

private static class Control { ...