Después de leer parte de la certificación SCJP anoche, pensé en las declaraciones de cambio y cómo se evalúan las expresiones, y algo me deja perplejo.¿Por qué una expresión booleana es válida en un bloque de casos cuando los booleanos no son tipos de datos compatibles para los switches?
Java no le permitirá cambiar en un valor lógico, por lo que el siguiente no se compilará:
public static void switchOnBoolean(boolean theBool)
{
System.out.println("\n\nAssessing boolean :" + theBool);
// line below won't compile, since booleans are not valid for the switch statement
switch(theBool)
{
case true:
{
System.out.println("The boolean was true");
break;
}
case false:
{
System.out.println("The boolean was false");
}
}
}
Sin embargo, el compilador no se quejará si se intenta utilizar una expresión que se evalúa como un valor booleano en un bloque caso, como por ejemplo:
public static void switchOnChar(char theChar)
{
System.out.println("\n\nAssessing char : " + theChar);
switch(theChar)
{
case 'a':
{
System.out.println("The char was a");
break;
}
case 'b':
{
System.out.println("The char was b");
break;
}
case ('c' | 'd'):
{
System.out.println("The char was c or d");
break;
}
default:
{
System.out.println("The char didn't match anything, must be something else");
}
}
}
en última instancia, no puede nunca entrar en el caso ('c' | 'd')
ya que es de suponer que evaluar a un valor lógico ...
Así que mi pregunta es:
- ¿Por qué es legal el uso de algo así como
('c' | 'd')
? - ¿Cómo podría ser útil alguna vez, ya que sería inalcanzable
- Si alguna vez quiso encajar en más de un valor, pero sin utilizar un valor predeterminado, es su única opción volver a implementar como una instrucción if-else ?
http://docs.oracle.com/javase/specs/jls/se7/html/jls-15.html # jls-15.22.1 – Mat
¿Por qué sería inalcanzable? –
Pruebe ''c' y 'd'' que coincida con 'o' c '+' d 'que coincida con Ç y' c '/' d 'con el byte nulo \ 0;) –