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 ??
Switch case
7 Respostas
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,
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.
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.
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é.
Acho que polimorfismo não resolve algo comoString 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
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.