Comparer les valeurs enum de Java
Est-il un moyen de vérifier si une valeur d'enum est "supérieur ou égal" à une autre valeur?
Je veux vérifier si un niveau d'erreur est une erreur ou d'en haut".
Vous devez vous connecter pour publier un commentaire.
Tous Java enums implémente Comparable: http://java.sun.com/javase/6/docs/api/java/lang/Enum.html
Vous pouvez également utiliser le
ordinal
méthode pour les transformer enint
s, alors la comparaison est trivial.Une version qui est beaucoup plus expressif serait
ou
De cette façon, vous pouvez définir l'ordre à l'intérieur de l'Enum et peut changer la mise en œuvre en interne si vous le souhaitez. Maintenant, les clients de l'Enum peut comparer les valeurs sans en connaître tous les détails à ce sujet.
Une possible mise en œuvre doit être
Je voudrais aussi ne recommandons pas l'utilisation de l'ordinal() méthode pour la comparaison, parce que quand quelqu'un change de l'ordre de l'énumération des valeurs définies, vous pourriez obtenir un comportement inattendu.
En supposant que vous avez définie dans l'ordre de gravité, vous pouvez comparer les ordinaux de chaque valeur. L'ordinal est sa position dans sa déclaration d'enum, où la première constante est attribué un nombre de zéro.
Vous obtenez l'ordinal par l'appel de la ordinal() la méthode de la valeur.
Une enum doit avoir un niveau associé. Afin de trouver supérieure ou égale vous conseillons de comparer les niveaux.
À l'aide de ordinale s'appuie sur l'ordre de l'énumération des valeurs apparaissent. Si vous comptez sur ce que vous devriez document autrement une telle dépendance peut conduire à une fragilité code.
Java enum a déjà construit dans compareTo(..) méthode, qui utilise le protocole enum position (aka ordinal) pour comparer un objet à l'autre. La position est déterminée en fonction de l'ordre dans lequel les enum constantes sont déclarées
où la première constante est attribué un nombre de zéro.
Si cet arrangement est pas approprié, vous pouvez avoir besoin pour vous définir propre comparateur de par l'ajout du champ interne(s) comme indiqué ci-dessous:
Pilote pour vérifier si tout fonctionne:
Une autre option serait
De votre question, je suis en supposant que vous êtes en utilisant un enum pour désigner une sorte de valeur de retour, dont certaines sont des états d'erreur. Cette mise en place a l'avantage de ne pas devoir ajouter de nouveaux types de retour dans un lieu particulier (et ensuite ajuster votre test de valeur), mais a l'inconvénient d'avoir besoin d'un travail supplémentaire dans l'initialisation de l'enum.
De poursuivre mon hypothèse un peu plus loin, sont des codes d'erreur de quelque chose pour l'utilisateur? Un outil de débogage? Si c'est le dernier, que j'ai trouvé à l'exception du système de manipulation à être assez bien pour Java.