Switch case

7 respostas
E

Porque a estrutura switch do java aceita somente emun ou int…?
Eu estava passando um código em C# para Java e vi essa diferença.
Não faz muito sentido, na minha opinião deveria aceita qualquer coisa
só em Java que é assim ??

7 Respostas

R

Olá:

O switch do Java, assim como acontce como o do C - de quem copiou - aceita apenas tipos numéricos como int, char, short, etc. Quanto ao enum, o compilador dá um “jeitinho” para substituí-lo pelo seu valor numérico. Bem ou mal é uma característica da linguagem. Uma linguagem em que o switch funciona como o do C# é o JavaScript:

var a = 'oi'

switch(a) {
   case 1: alert("UM"); break;
   case "oi": alert("OI"); break;
   case 'a': alert("A"); break;
   default: alert("hein?? " + a)
}

Se quiser saber mais detalhes, sugiro da uma olhada neste texto: Switch Statement.

Grato,

M

No Delphi também é assim… E ainda por cima só aceitava valores
que pudessem ser convertidos para o intervalo 0…255 .
Eu sempre achei isto meio tosco.

J

Na minha opinião tá de bom tamanho, visto que estruturas switch são, na maioria das vezes, um bad smell. Se você pode usar polimorfismo pra que switch flexível? :?

_

Aceita char:

char c = 'b'; switch (c) { case 'a': System.out.println("a"); break; case 'b': System.out.println("b"); break; }

Mas concordo com Vinicius.

M
Java Vinicius Machine:
Na minha opinião tá de bom tamanho, visto que estruturas switch são, na maioria das vezes, um bad smell. Se você pode usar polimorfismo pra que switch flexível? :?

Acho que polimorfismo não resolve algo como

String s;

// algum processamento que preenche s

switch (s) {   
case "MOV":   
    // faz alguma coisa quando for MOV  
    break;   
case "ENT":   
    // faz alguma coisa quando for ENT 
    break;   
case "OUT":   
    // faz alguma coisa quando for OUT
    break;   
}

E se fosse um double?
Na boa, acho que ia ajudar muito ao invés de ficar colocando um monte de ifs.

Inté.

J
marciosantri:
Acho que polimorfismo não resolve algo como
String s;

// algum processamento que preenche s

switch (s) {   
case "MOV":   
    // faz alguma coisa quando for MOV  
    break;   
case "ENT":   
    // faz alguma coisa quando for ENT 
    break;   
case "OUT":   
    // faz alguma coisa quando for OUT
    break;   
}

E se fosse um double?
Na boa, acho que ia ajudar muito ao invés de ficar colocando um monte de ifs.

Dá pra encapsular tudo isso usando o padrão de projeto Command. (É matar formiga com granada, mas mesmo assim... só pra ressaltar que dá pra encapsular). :D

B

Polimorfismo não resolve esses switches por que simplesmente esse não é o trabalho do polimorfismo.

Trabalhe com objetos que façam alguma coisa, não com tipo e objetos que guardem dados.

Criado 14 de maio de 2008
Ultima resposta 15 de mai. de 2008
Respostas 7
Participantes 6