2011-06-22 14 views
18

Tengo una clase interna que almacena la información de los controles que estoy usando para un juego, ahora quiero almacenar una ArrayList estática que contiene todos los nombres de los controles . Pero estoy consiguiendo este error: "modificador static sólo se permite en las declaraciones de variables constantes"Modificador estático solo está permitido en declaraciones de variables constantes

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

Ahora sé que esto puede ser fácilmente resuelto mediante la adopción de la ArrayList de la clase y su almacenamiento en la clase principal. Pero preferiría mantener toda la información en una clase en la que pueda acceder a todo.

"Control.key, Control.trigger, Control.keys" es sólo más elegante/legible que "clave, disparador, las teclas"

O tal vez sólo tengo trastorno obsesivo-compulsivo , aún así me gustaría hacerlo a mi manera.

+0

dan más información sobre cómo se creó interior ¿clase? – fmucar

Respuesta

30

Puede hacer que la clase Control sea estática.

private static class Control { 
     ^^^^^^ 

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

    ... 

Esto se describe en la especificación del lenguaje Java 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).

8

Haga su clase interna estática y funcionará:

private static class Control { ... 
Cuestiones relacionadas