修饰符 static 只允许在常量变量声明中

Posted

技术标签:

【中文标题】修饰符 static 只允许在常量变量声明中【英文标题】:Modifier static is only allowed in constant variable declarations 【发布时间】:2011-09-20 08:47:39 【问题描述】:

我有一个内部类,用于存储我在游戏中使用的控件的信息,现在我想在其中存储一个静态 ArrayList,其中包含所有控件的名称。但是我收到了这个错误:“Modifier static is only allowed in constant variable declarations”

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” 只是比更优雅/更易读 “键、触发器、键”

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

【问题讨论】:

提供更多关于你如何创建内部类的信息? 【参考方案1】:

您可以将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 节)。

【讨论】:

【参考方案2】:

让你的内部类静态,它会工作:

private static class Control  ...

【讨论】:

以上是关于修饰符 static 只允许在常量变量声明中的主要内容,如果未能解决你的问题,请参考以下文章

java关键字static

菜鸟笔记二常量和变量

Java接口基础

静态修饰符static,类中的常量定义修饰符

对变量及常量的总结

对变量及常量的总结: