Il compilatore Java effettua quello che si chiama "conservative flow analysis" per verificare che tutte le istruzioni siano "reachable" (raggiungibili).Originariamente inviato da mist3r0
Salve a tutti,
Ragazzi, ho un problema, devo controntare dei tipi enum e farmi ritornare un intero.
Tutto sembra normale e corretto, ma il compilatore mi da errore, e mi dice che il metodo deve restituire un intero!!Codice PHP:
enum Stato {ROSSO, GIALLO, VERDE};
...
...
...
public int getStatoCorrente(){
if(currentStatoSemaforo.name().equals("ROSSO")) return 0;
if(currentStatoSemaforo.name().equals("GIALLO")) return 1;
if(currentStatoSemaforo.name().equals("VERDE")) return 2;
}
Ora .. il compilatore non può sapere a priori se e quali dei tre if è 'true', pertanto sa di conseguenza che nessuno dei tre return è sempre reachable.
Ne consegue che devi mettere un altro return, ad esempio fisso al fondo. Insomma ... è possibile che nessuno dei tre return venga eseguito e quindi .... beh, devi fare in modo e assicurarti che in qualunque caso il metodo abbia sempre un valore di ritorno!!
Per tornare alla questione della enum, il test che fai forse è superfluo. Se come suppongo 'currentStatoSemaforo' è di tipo Stato, le cose possono essere molto più semplici:
if (currentStatoSemaforo == Stato.ROSSO) .....
e nota che ogni enum possiede un metodo di istanza ordinal() che ritorna un intero che indica la posizione (0 based) nella dichiarazione della enum (0 per ROSSO, 1 per GIALLO ecc....).