Modifier static is only allowed in constant variab

2019-01-07 18:01发布

I have an inner class that stores the info of the controls I'm using for a game, now I want to store a static ArrayList in it that holds all the names of the controls. But I am getting this error: "Modifier static is only allowed in constant variable declarations"

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);
    }
}

Now I know this can easily be solved by taking the ArrayList out of the class and storing it in the main class. But I'd prefer to keep all the information in one class where I can access everything.

"Control.key, Control.trigger, Control.keys" is just more elegant/readable than "key, trigger, keys"

Or maybe I just have Obsessive–compulsive disorder, still I'd like to do it my way.

2条回答
三岁会撩人
2楼-- · 2019-01-07 18:30

Make your inner class static and it will work:

private static class Control { ...
查看更多
爷的心禁止访问
3楼-- · 2019-01-07 18:36

You can make the Control class static.

private static class Control {
        ^^^^^^

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

    ...

This is described in the Java Language Specification Section §8.1.3

8.1.3 Inner Classes and Enclosing Instances

An inner class is a nested class that is not explicitly or implicitly declared static. Inner classes may not declare static initializers (§8.7) or member interfaces. Inner classes may not declare static members, unless they are compile-time constant fields (§15.28).

查看更多
登录 后发表回答