domingo, 21 de junio de 2009

Java: comparacion de String Class en una sentencia Case

Hace unos dias platicando con mi amigo Ernesto, le comente que trabajando con el String Class y sus comparaciones con if-then-else me estaba creando un codigo no muy estetico en cuanto a las identaciones y anidamientos que debia tener dentro de mi codigo.

Buscando soluciones esteticas y sobre todo eficientes, Ernesto me comento que habia la posibilidad de resolver este problema con una tabla hash, asi que me di a la tarea de ver las APIs de las clases que me podrian servir. La implementacion es como sigue:


//Instancia del hashtable, se agregan los valores que esperamos recibir
Hashtable action = new Hashtable();

//Se registran las cadenas y los valores que van a tener en hashtable
action.put("list", new Integer(1));
action.put("new", new Integer(2));
action.put("edit", new Integer(3));
action.put("rm", new Integer(4));

//Se intenta capturar la excepcion en el caso de que llegue
//otro valor distinto a los esperados en hashtable
try{
switch( (Integer) action.get( myString ) ){
case 1:
//codigo para cuando llega una cadena "list"
case 2:
//codigo para cuando llega una cadena "new"
case 3:
//codigo para cuando llega una cadena "edit"
case 4:
//codigo para cuando llega una cadena "rm"
}
}
//En caso de llegar cadena no registrada se captura la excepcion
catch(NullPointerException e){
//codigo de exepcion, algo asi como un "default" dentro del case
}

1 comentario:

David Estrada dijo...

Hola Martín. Yo en lo personal prefiero utilizar constantes como en C :). Hay veces que creo las constantes en la misma clase, pero en el caso que sean constantes más generales, prefiero crear una clase final para colocar esas constantes. Por ejemplo:

public static final int NUEVO = 0;

Para el caso que se trate de valores obtenidos desde alguna tabla de la base de datos, normalmente con valores de configuración fijos, el valor del entero puede ser el id del registro. Se me hace más fácil manejarlo así q con HashTable. Dependiendo de la técnica, te puedes ahorrar la comparación entre cadenas.

Saludos.