Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it L'avatar di mist3r0
    Registrato dal
    Mar 2007
    Messaggi
    103

    Confrontare tipi Enum

    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!!

    Come devo fare??

    Grazie, ciao ciao
    M|$T3R®

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320

    Moderazione

    Quando ti accorgi di aver sbagliato sezione, chiedi di essere spostato, non aprire una nuova discussione, altrimenti fai cross-posting, che è vietato su tutto il forum.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  3. #3
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: Confrontare tipi Enum

    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....).
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  4. #4
    Utente di HTML.it L'avatar di mist3r0
    Registrato dal
    Mar 2007
    Messaggi
    103
    Grazie tante andbin!

    Funziona...
    M|$T3R®

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.