Comment puis-je dire à Eclipse de me prévenir lorsque je compare des chaînes avec == au lieu de .equals ()

Je sais que lorsque vous comparez Ssortingng s, vous devez utiliser .equals() not == et je comprends les raisons de cela. Cependant, j’oublie parfois et compare les chaînes avec == par erreur. J’aimerais que Eclipse (étant beaucoup plus intelligent que moi) me prévienne en effectuant une ou plusieurs des opérations suivantes:

  • Soulignant mon erreur avec une ligne rouge ondulée et soulignant l’erreur
  • Refuser de comstackr mon code jusqu’à ce que je corrige l’erreur
  • Corriger l’erreur pour moi
  • Me battre sur la tête avec le livre de Joshua Bloch le plus proche jusqu’à ce que je m’excuse

Dans Eclipse 3.5, vous pouvez demander à Eclipse de vous avertir de toutes sortes de choses en allant dans Fenêtre> Préférences> Compilateur> Erreurs / Avertissements, mais malheureusement, “Comparer des chaînes avec == au lieu de .equals ()” ne semble pas être d’eux. Est-ce que je manque juste ça? Y a-t-il une chance d’append ceci dans une prochaine version?

EDIT: Je préfère faire cela en utilisant les fonctionnalités intégrées d’Eclipse, plutôt que de devoir télécharger un plugin. Cependant, je pense qu’il serait toujours utile de mentionner les plugins qui ont cette fonctionnalité dans vos réponses.

Eclipse ne pourra jamais vous le dire. Findbugs ou PMD peuvent probablement.

EDIT: je dis

Eclipse ne pourra jamais vous le dire.

car il n’y a rien de mal avec le code a == b comme code java. Si vous voulez de l’aide supplémentaire, c’est là que d’autres plugins viennent vous aider.

Edit: Selon Pascal Thivent, Findbugs ne peut pas faire cela, mais il semble que PMD peut le faire. Je laisse le lien vers Findbugs, car c’est probablement un lien utile pour les personnes qui rencontrent cette question.

https://bugs.eclipse.org/bugs/show_bug.cgi?id=39095

Bug 39095 – RFE: avertit lorsque des non-primitives sont comparées en utilisant ==

Ce serait bien que le compilateur puisse autoriser un avertissement lorsque == est utilisé pour comparer des types non primitifs, afin que Ssortingng soit comparé à ==, alors qu’une approche valide si vous travaillez en interne et utilisez le pool de chaînes, peut être intercepté comme avertissements à la compilation au lieu de ruptures non évidentes à l’exécution.

Contrairement à ce qui a été dit dans les commentaires précédents, FindBug (maintenant?) Peut détecter de telles erreurs de comparaison. Dans mon cas, FindBug était mieux en mesure de signaler des erreurs que PMD.

Il existe deux catégories de rapport de bogue:

Et j’aimerais append au débat de “Cet avertissement est-il utile?”:

J’ai converti beaucoup de code JavaScript à partir d’un jeu HTML5 pour le convertir en un jeu Android. En JavaScript, les chaînes sont comparées avec “==”. Ils ont été convertis de cette façon en Java. J’avais donc besoin d’un outil pour être absolument sûr d’avoir tout remplacé par “.equals (“.

Je ne pense pas que tu peux.

Utiliser == est une fonctionnalité de langage Java valide. Il y aurait des circonstances où vous voudriez faire cette chose exacte. Alors quoi?

Probablement, un beau jour, un programmeur voudrait que l’IDE le prévienne lorsqu’il écrit i = 10 (au lieu de i == 10 )

Heureusement, c’est là que l’ homme prend la machine en main et nous avons tous notre travail 🙂

Malheureusement, il y a tellement de systèmes buggés 🙁

Je suis sûr qu’avec le temps, vous aurez l’habitude d’utiliser equals() pour Ssortingng