Java – Modifier static is only allowed in constant variable declarations

arraylistjavaliststatic

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

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.

Best Solution

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).

Related Question