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