Статический модификатор допускается только в объявлениях константных переменных - PullRequest
24 голосов
/ 22 июня 2011

У меня есть внутренний класс, в котором хранится информация об элементах управления, которые я использую для игры, теперь я хочу сохранить в нем статический ArrayList, содержащий все имена элементов управления. Но я получаю эту ошибку: «Модификатор static разрешен только в объявлениях постоянных переменных»

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" просто более элегантно / читабельно, чем «клавиша, триггер, клавиши»

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

Ответы [ 2 ]

38 голосов
/ 22 июня 2011

Вы можете сделать класс 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).

8 голосов
/ 22 июня 2011

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

private static class Control { ...
...