当前位置: 首页 > 面试题库 >

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

洪念
2023-03-14
问题内容

我有一个内部类,用于存储用于游戏的控件的信息,现在我想在其中存储一个静态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”“ key,trigger,keys” 更优美/更易读
__

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


问题答案:

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



 类似资料:
  • 我做了一个程序来显示旋转给定的。jpg文件。编译有困难,因为它声明:

  • 问题内容: 我想在中实现常量,因为在代码中找到常量是很有意义的。 到目前为止,我一直在使用静态方法实现以下变通方法: 我知道有可能摆弄原型,但许多人建议不要这样做。 有没有更好的方法在ES6类中实现常量? 问题答案: 您可以执行以下操作: 从 模块中 导出a 。根据您的用例,您可以: 并在必要时从模块导入该文件。或者,基于您的静态方法思想,您可以声明一个get访问器: 这样,您将不需要括号: 然后

  • 本文向大家介绍Java使用静态声明常量,包括了Java使用静态声明常量的使用技巧和注意事项,需要的朋友参考一下 示例 由于该static关键字用于访问没有实例化类的字段和方法,因此可以用来声明用于其他类的常量。这些变量将在类的每个实例中保持不变。按照惯例,static变量始终是ALL_CAPS并且使用下划线而不是驼峰式大小写。例如: 由于常量不能更改,static因此也可以与final修饰符一起使

  • 我是Java的初学者。我正在学习最终变量,并尝试了这段代码。 然而,Eclipse给了我一个错误。 我做错了什么?如何将所有对象的最终变量设置为静态?

  • 问题内容: 为什么将Java常量声明为static? 在此我了解使用final吗?购买为什么它必须是静态的?为什么它应该是类变量,而不是实例变量? 问题答案: 如果它可以随类的实例而变化,那么显然它不是 常数 。为的每个实例获得不同的pi值意味着什么(甚至不允许构造实例)?还是每个实例的大小写不区分大小写?

  • let和const是JavaScript里相对较新的变量声明方式。 像我们之前提到过的,let在很多方面与var是相似的,但是可以帮助大家避免在JavaScript里常见一些问题。 const是对let的一个增强,它能阻止对一个变量再次赋值。 因为TypeScript是JavaScript的超集,所以它本身就支持let和const。 下面我们会详细说明这些新的声明方式以及为什么推荐使用它们来代替v