C'est pour éviter la possibilité de comparer les différents types d'énumérations. Il est logique de le restreindre à un type, c'est à dire le type de la valeur d'enum en switch
déclaration.
Mise à jour: c'est fait pour garder la compatibilité binaire. Voici un cite d'environ à mi-chemin chapitre 13.4.9 de JLS:
L'une des raisons pour exiger, d'inlining des constantes c'est qu' switch
états exigent des constantes sur chaque case
, et pas de deux de ces valeurs de constantes peuvent être les mêmes. Le compilateur vérifie pour dupliquer les valeurs des constantes dans un switch
déclaration au moment de la compilation; l' class
format de fichier ne fait pas le lien symbolique de valeurs.
En d'autres termes, en raison de l'identificateur de classe (en EnumType.ENUM1
, il ne peut pas être représenté comme une compile-time expression constante, alors qu'il est requis par l' switch
déclaration.