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

时间:2011-06-22 12:41:59

标签: java list static arraylist

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

private class Control{
    public 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” 比...更优雅/可读 “键,触发器,键”

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

2 个答案:

答案 0 :(得分:36)

您可以将Control类设为静态。

private static class Control {
        ^^^^^^

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

    ...

Java语言规范Section §8.1.3

中对此进行了描述
  

8.1.3内部类和封闭实例

  内部类是未显式或隐式声明为静态的嵌套类。内部类可能不会声明静态初始化器(第8.7节)或成员接口。 内部类可能不会声明静态成员,除非它们是编译时常量字段(第15.28节)。

答案 1 :(得分:8)

让你的内部类静态,它将起作用:

private static class Control { ...