En employant des enums dans un commutateur, il est presque normal de supposer qu'ils seront employ�s comme un commutateur r�gulier. Adapter malheureusement � des enums, Java a d� augmenter ses sp�cifications et les enums dans le commutateur se comportent diff�remment que des rapports de commutateur r�guliers de deux significatifs et de mani�res non triviales.

Javac de Sun indique - ��l'�tiquette de cas de commutateur d'enum doit �tre le nom sans r�serve d'une constante d'�num�ration. dans son message d'erreur �nigmatique. C'est probablement fran�ais � beaucoup. Je sais que j'ai eu un moment difficile comprenant ce rapport.

Laissez-ainsi nous comprennent ceci avec un exemple simple :

commutez (UserAgent.FIREFOX) {
    cas (UserAgent.IE) :
        �chouer (corde d'UserAgent.IE.to () + ��unexpected.") ;
}

Ceci regarde �videmment correct ne fait pas il ? Malheureusement il est erron� de deux mani�res diff�rentes.
Premi�rement le cas devrait �tre sans parenth�ses. Seulement l'IE devrait �tre employ� deuxi�mement mais pas UserAgent.IE. Illustrons tous les deux points ci-dessus avec un exemple (correct) simple :

commutez (UserAgent.FIREFOX) {
    IE de cas :
        �chouer (corde d'UserAgent.IE.to () + ��unexpected.") ;
}

Pour r�capituler :

  • Au cas o� le rapport l'enum devrait �tre employ� sans parenth�ses.
  • Au cas o� seulement le nom sans r�serve d'enum (comme FIREFOX ou IE dans l'exemple ci-dessus) devrait �tre employ�.

Tellement maintenant vous ne feriez plus d'erreurs avec des enums de Java, droite ?