chaîne de comparaison avec énumération
J'analyse le morceau de code suivant à l'aide d'un outil d'analyse statique appelé FindBugs.
if(str.equals(enum.SOMEVALUE)) {//do something};
où str est une Chaîne de caractères et enum est une énumération. L'outil génère le message d'avertissement suivant ce code, et les états
Ce appels de méthode equals(Object) sur deux références de différents types de classe avec aucune des sous-classes. Selon le contrat de equals(), des objets de différentes classes faut toujours comparer inégalité; par conséquent, selon le contrat défini par java.lang.Objet.equals(Object), le résultat de cette comparaison sera toujours faux au moment de l'exécution.
si je remplace la ligne au-dessus de code:
if(str.equals(enum.SOMEVALUE.toString())) {//do something};
alors l'avertissement disparaît.Mais je ne suis pas sûr si l'avertissement que l'outil génère est vraiment vrai et si je suis la fixation de la bonne façon ? parce que j'ai vu de telles comparaisons avant et il semble fonctionner correctement.
source d'informationauteur comatose | 2012-05-11
Vous devez vous connecter pour publier un commentaire.
Votre première comparaison est fondamentalement mal. Vous de comparer des objets de types différents (
String
etEnum
) et ils ne peuvent jamais être identiques. ide même me donne un message d'avertissement ici. Il compile uniquement parce queequals()
accepteObject
pas unString
.La deuxième comparaison est corriger.
Bien que JavaDoc est un peu dur sur
nom()
méthode, je fait des conseils de l'utiliser en cas donné enum atoString()
surchargée:Je pense que le remplacement de la constante pour le
toString()
peut être la bonne chose à faire, je voudrais le changer pour.name()
mais parce que toString est d'être écrasé.vous pouvez essayer
comme il
Je vous suggère de l'aide:
Autant que je sache, vous êtes dans le bon chemin.
Cela devrait être ok.