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

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

private class Control{ public ArrayList keys = new ArrayList(); 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”“键,触发器,键”更优雅/可读

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

您可以使Control类保持静态。

 private static class Control { ^^^^^^ // Ok to have static members: public static ArrayList keys = new ArrayList(); ... 

这在Java语言规范部分§8.1.3中有所描述

8.1.3内部类和封闭实例

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

使你的内部类静态,它将工作:

 private static class Control { ...