2011-06-26 34 views
8

Para mi aplicación de Android tengo la necesidad de definir algunas claves en una sola constante, y creo que la mejor manera de hacerlo es usando un mapa. Pero no estoy seguro de si ese es realmente el camino a seguir y cómo hacerlo correctamente. Como mi objetivo es Android, un paquete también puede ser una opción.Definir un mapa como constante en java

que tienen una lista de claves como:
"h" = "http"
"f" = "ftp"

Básicamente el programa es para leer un código QR (para mantener ese código de crecimiento demasiado grande estoy usando teclas súper cortas), obtiene esas claves, y tiene que traducirlas a algo útil, en mi caso un protocolo.

Estoy tratando de definir una constante llamada KEY_PROTOCOLS, creo que esto debería ser un mapa, por lo que luego puedo llamar a algo como KEY_PROTOCOLS.get ("f") para obtener el protocolo que pertenece a la tecla "f".

Otras clases también deberían poder importar esta constante y usarla. Entonces este mapa debe ser llenado en la clase de inmediato.

¿Cómo puedo hacer esto?

+1

Ver: 1 http://stackoverflow.com/questions/507602/how-to-initialise-a-static-map-in-java – Kaarel

Respuesta

17

Si la constante es compartido por varias clases, y si usted quiere asegurarse de que este mapa no es borrado o modificado por algún código, será mejor que no se pueda modificar:

public static final Map<String, String> KEY_PROTOCOLS; 

static { 
    Map<String, String> map = new HashMap<String, String>(); 
    map.put("f", "ftp"); 
    // ... 
    KEY_PROTOCOLS = Collections.unmodifiableMap(map); 
} 
+1

para lo que es inmodificable. Si el OP está utilizando las bibliotecas de Guava, también pueden usar 'ImmutableMap'. 'public static final ImmutableMap KEY_PROTOCOLS = ImmutableMap.of (" f "," ftp ");' – Tom

+0

La primera respuesta fue buena, esta incluso mejor, por eso esta es mi respuesta "aceptada". ¡Gracias! – Wouter

0

Esto funcionaría.

static Map<String, String> map = new HashMap<String, String>(); 

static { 
    map.add("ftp", "ftp"); 
    ... 
} 
2

Algo como esto:

private static final Map<String, String> KEY_PROTOCOLS = new HashMap<String, String>(); 
static{ 
    KEY_PROTOCOLS.put("f", "ftp"); 
    // More 

} 

inicializadores estáticos:

http://www.glenmccl.com/tip_003.htm

0

en Android:

@SuppressWarnings("unchecked") 
Pair<String,String>[] pre_ips=new Pair[]{new Pair<String,String>("173.194", "0"), new Pair<String,String>("74.125", "96")}; 
String ip_1_2,ip_3; 
for (Pair<String,String> pre_ip:pre_ips) 
    {ip_1_2=pre_ip.first; 
    ip_3=pre_ip.second; 
    } 
Cuestiones relacionadas