Non conosco i moivi di questa scelta implementativa... che mi pare bizzarra... in un linguaggio dove puoi fare quasi tutto, questa è una limitazione non da poco
E a volte è proprio utile, soprattutto ai fini delal leggibilità del codice, eseguire uno switch su delle stringhe
Ok, ok, la soluzione potrebbe essere una serie di If elseif... ma ve lo immaginate un codice con una decina di elseif?
Uno schifo.
Certo, si potrebbe pure fare una mappatura "caratteri-integer", ma che barba... e poi risulterebbe meno leggibile il codice
Girovagando in rete ho trovato una soluzione abbastanza buona.
In pratica, prima di eseguire lo switch, si crea una costante Enum, elencando come contenuti enumerativi le stringhe che si vogliono usae... e poi switchare su queste
Esempio, ho una variabile stringa che può assumere questi valori "carne, pesce, dolce, contorno, frutta" e voglio creare uno switch su questa variabile sringa
Si prosegue così:
- Definire una costante enum con i valori congruenti alle stringhe che si vogliono prendere in considerazione
enum portate {
carne, pesce, dolce, contorno, frutta
} - Successivamente eseguire uno switch con un valueof(costanteenum). Il valueof fa una comparazione tra le stringhe e i valori di enum. Si può usare toLowerCase per un confronto non case sensitive
switch (portate.valueOf(e.getActionCommand().toLowerCase())){
case carne:
bla bla
break;
[...]
case frutta:
bla bla
break;
} - L'unico problema è che così si potrebbero sollevare delle eccezioni IllegalArgumentException or NullPointerException (penso che succeda se la stringa ha un valore che non ha corrispondenze nell'enum. Si possono gestire con un Try-catch
enum portate {
carne, pesce, dolce, contorno, frutta;
public static portate cercaportata(String stringa)
{
try {
return valueOf(strimga);
}
catch (Exception ex) {
return NOVALUE;
}
}
}
switch (portate.valueOf(e.getActionCommand().toLowerCase())){
case carne:
bla bla
break;
[...]
case frutta:
bla bla
break;
default:
bla bla per valori non presenti nell'enum
}
Nessun commento:
Posta un commento