Подтвердить что ты не робот

Модификатор static разрешен только в объявлениях с постоянной переменной

У меня есть внутренний класс, который хранит информацию об элементах управления, которые я использую для игры, теперь я хочу сохранить в ней статический массив 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" является более элегантным/читаемым, чем "ключ, триггер, клавиши"

Или, может быть, у меня просто обсессивно-компульсивное расстройство, но я бы хотел сделать это по-своему.

4b9b3361

Ответ 1

Вы можете сделать класс 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. Внутренние классы и экземпляры Enclosing

Внутренний класс представляет собой вложенный класс, который явно или неявно не объявлен статическим. Внутренние классы не могут объявлять статические инициализаторы (§8.7) или интерфейсы-члены. Внутренние классы не могут объявлять статические члены, если они не являются постоянными полями времени компиляции (§15.28).

Ответ 2

Сделайте свой внутренний класс статическим, и он будет работать:

private static class Control { ...