Nuevas características de Java SE 7

Después de meses de espera, la nueva versión de Java está aquí. Junto a mejoras de rendimiento en el entorno de ejecución, Java ofrece nuevas funcionalidades en el lenguaje que presentamos a continuación. USO DE CADENAS EN ‘SWITCH’ Hasta ahora, la sentencia de control switch funcionaba con valores enteros, lo que nos llevaba a tener un código similar a:

public void seleccion(int opcion) {

switch(opcion) {
   case 1:
      System.out.println("Primera opción");
      break;
   case 2:
      System.out.println("Segunda opción");
      break;
   default:
      System.out.println("Opción por defecto");
}

Lo que puede mejorarse un poco con objeto de hacer el código más expresivo utilizando constantes del siguiente modo:

//en algún lugar de nuestra clase o en alguna otra clase o interfaz
static final int PRINCIPAL = 1;
static final int SECUNDARIA = 2;

...

switch(opcion) {
   case PRINCIPAL:
      System.out.println("Primera opción");
      break;
   case SECUNDARIA:
      System.out.println("Segunda opción");
      break;
   default:
      System.out.println("Opción por defecto");
}

La sentencia switch no sólo funciona con enteros, también puede utilizarse con los tipos de datos char, byte y short así como para las clases wrapper equivalentes (Char, Integer…). Con Java 5 también se podían utilizar enumerados, que fueron introducidos justo en esa versión.

Ahora, con Java 7, se pueden utilizar cadenas en las sentencias switch. Esto resulta interesante, ya que en muchas sentencias de control de ejecución estamos acostumbrados a utilizar cadenas, como se ve siguiendo con el ejemplo anterior:

public void seleccion(String opcion) {

  switch(opcion) {
    case "Principal":
      System.out.println("Primera opción");
      break;
    case "Secundaria":
      System.out.println("Segunda opción");
      break;
    default:
      System.out.println("Opción por defecto");
  }
}

Hay que tener en cuenta que, si el valor que se está evaluando es nulo, se elevará una excepción del tipo NullPointerException y que las opciones tienen que ser literales de cadenas o bien alguna expresión constante de tipo java.lang.String. Además, hay que saber que la inclusión de cadenas de caracteres en sentencias switch no supone ningún cambien a nivel de bytecode.