String no Switch (Java 7)

No Java 7, temos um recurso bastante interessante que é o uso de String no bloco switch. Na minha opinião, é um recurso útil que demorou bastante para ser incorporado na linguagem.

Pontos importantes:

  1. É proibido o uso de null nas cláusulas case
  2. O uso de null na verificação do switch irá gerar um NullPointerException
  3. Os elementros utilizados nas cláusulas case tem que ter o modificador final
  4. Não é permitido valores duplicados no case

Exemplo de código correto:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
String nome = "Thiago";
final String SOBRENOME = "Vespa";
switch (nome) {
case "Thiago":
    System.out.println("Esse é o meu primeiro nome!");
    break;
case "Galbiatti":
    System.out.println("Esse é o meu nome do meio!");
    break;
case SOBRENOME:
    System.out.println("Esse é o meu sobrenome!");
    break;
default:
    System.out.println("Não sei o que é isso!");
}

Exemplo de código não compilável ao utilizar null no case:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
String nome = "Thiago";
final String SOBRENOME = "Vespa";
switch (nome) {
case "Thiago":
    System.out.println("Esse é o meu primeiro nome!");
    break;
case "Galbiatti":
    System.out.println("Esse é o meu nome do meio!");
    break;
case SOBRENOME:
    System.out.println("Esse é o meu sobrenome!");
    break;
case null:
    System.out.println("Null não pode!");
    break;
default:
    System.out.println("Não sei o que é isso!");
}

Exemplo de código que gera um NullPointerException:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
String nome = null;
final String SOBRENOME = "Vespa";
switch (nome) {
case "Thiago":
    System.out.println("Esse é o meu primeiro nome!");
    break;
case "Galbiatti":
    System.out.println("Esse é o meu nome do meio!");
    break;
case SOBRENOME:
    System.out.println("Esse é o meu sobrenome!");
default:
    System.out.println("Não sei o que é isso!");
}

Exemplo de código não compilável por não possuir o modificador final e ser utilizado no case:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
String nome = "Thiago";
String SOBRENOME = "Vespa";
switch (nome) {
case "Thiago":
    System.out.println("Esse é o meu primeiro nome!");
    break;
case "Galbiatti":
    System.out.println("Esse é o meu nome do meio!");
    break;
case SOBRENOME:
    System.out.println("Esse é o meu sobrenome!");
    break;
default:
    System.out.println("Não sei o que é isso!");
}

E por último, exemplo de um código não compilável por ter elementos duplicados no case:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
String nome = "Thiago";
final String SOBRENOME = "Vespa";
switch (nome) {
case "Thiago":
    System.out.println("Esse é o meu primeiro nome!");
    break;
case "Thiago":
    System.out.println("Esse é o meu primeiro nome novamente!");
    break;
case SOBRENOME:
    System.out.println("Esse é o meu sobrenome!");
    break;
default:
    System.out.println("Não sei o que é isso!");
}

É isso. Agora só usar String no switch.

Sobre: Thiago Galbiatti Vespa

Thiago Galbiatti Vespa é mestre em Ciências da Computação e Matemática Computacional pela USP e bacharel em Ciências da Computação pela UNESP. Coordenador de projetos do JavaNoroeste, membro do JCP (Java Community Process), consultor Oracle, arquiteto de software de empresas de médio e grande porte, palestrante de vários eventos e colaborador de projetos open source. Possui as certificações: Oracle Certified Master, Java EE 5 Enterprise Architect – Step 1, 2 and 3; Oracle WebCenter Portal 11g Certified Implementation Specialist; Oracle Service Oriented Architecture Infrastructure Implementation Certified Expert; Oracle Certified Professional, Java EE 5 Web Services Developer; Oracle Certified Expert, NetBeans Integrated Development Environment 6.1 Programmer; Oracle Certified Professional, Java Programmer; Oracle Certified Associate, Java SE 5/SE 6