Originariamente inviato da mist3r0
Salve a tutti,

Ragazzi, ho un problema, devo controntare dei tipi enum e farmi ritornare un intero.

Codice PHP:

enum Stato 
{ROSSOGIALLOVERDE}; 
... 
... 
... 

public 
int getStatoCorrente(){       
     
if(
currentStatoSemaforo.name().equals("ROSSO")) return 0;   
         
if(
currentStatoSemaforo.name().equals("GIALLO")) return 1;   

if(
currentStatoSemaforo.name().equals("VERDE")) return 2
     

Tutto sembra normale e corretto, ma il compilatore mi da errore, e mi dice che il metodo deve restituire un intero!!
Il compilatore Java effettua quello che si chiama "conservative flow analysis" per verificare che tutte le istruzioni siano "reachable" (raggiungibili).
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....).