Écrire à champ statique - est FindBugs mal dans ce cas?
J'ai une classe Java comme ceci:
public class Foo {
public static int counter = 0;
public void bar(int counter) {
Foo.counter = counter;
}
}
FindBugs me prévient sur l'écriture pour le champ statique counter
via la méthode d'instance bar
. Cependant, si je change le code:
public class Foo {
public static int counter = 0;
public static void setCounter(int counter) {
Foo.counter = counter;
}
public void bar(int counter) {
setCounter(counter);
}
}
Puis FindBugs ne me plaindrai pas. N'est-ce pas mal? Je suis toujours écrit à un champ statique à partir d'une méthode d'instance, par le biais d'une méthode statique, ne suis-je pas?
Laissez-moi savoir quand les outils automatisés de devenir capable de détecter toutes sortes de bugs de programmation, donc je peux commencer à chercher une nouvelle carrière.
Mais c'est juste un type dans ce cas. 😛 je suis nouveau sur cet outil et ne savons pas encore quelle est la fiabilité de ses résultats. 🙂
Si FindBugs émet un avertissement, vous feriez mieux de regarder le problème. Mais cela ne veut pas dire que si FindBugs n'émet pas d'avertissement, vous code est parfait et sans bug.
Mais c'est juste un type dans ce cas. 😛 je suis nouveau sur cet outil et ne savons pas encore quelle est la fiabilité de ses résultats. 🙂
Si FindBugs émet un avertissement, vous feriez mieux de regarder le problème. Mais cela ne veut pas dire que si FindBugs n'émet pas d'avertissement, vous code est parfait et sans bug.
OriginalL'auteur htorque | 2012-11-14
Vous devez vous connecter pour publier un commentaire.
Supposons qu'à un certain moment dans l'avenir, à vous de décider cette méthode de définition doit être thread-safe et vous souhaitez le faire
synchronized
.Ce code fonctionne très bien:
Ce code est faux et aura un comportement incorrect:
Cela pourrait ne pas sembler une différence significative dans cet exemple artificiel, surtout depuis
counter
pouvez généralement être marquévolatile
. Cependant, dans l'exemple du monde réel où la méthode setter a plus de logique compliquée et est appelé à partir de nombreux endroits différents (et pas seulement à partir d'une méthode d'instance), le dernier modèle sera plus facile de refactoriser.En aparté, à mon avis Google CodePro Analytix plugin est beaucoup plus rapide et plus complète de l'outil de FindBugs.
Connexes:
je ne sais pas...mon entreprise utilise un custom version interne d'Eclipse, je n'ai donc pas eu à utiliser de la vanille de l'Éclipse de temps en temps.
OriginalL'auteur dbyrne
De la FindBugs liste de la description des anomalies:
Il n'y a pas de bug similaire description de l'accès à un champ statique par l'intermédiaire d'une méthode statique appelée à partir d'une méthode d'instance.
Vous voudrez peut-être discuter de la justification de cette décision sur la FindBugs liste de diffusion
OriginalL'auteur barrowc