Ich habe eine Java-Klasse wie folgt:
%Vor% FindBugs warnt mich davor, über die Instanzmethode counter
in das statische Feld bar
zu schreiben. Wenn ich jedoch den Code zu:
Dann wird sich FindBugs nicht beschweren. Ist das nicht falsch? Ich schreibe immer noch von einer Instanzmethode in ein statisches Feld, nur über eine statische Methode, oder?
Angenommen, Sie entscheiden irgendwann in der Zukunft, dass diese Setter-Methode Thread-sicher sein soll und Sie synchronized
machen wollen.
Dieser Code funktioniert gut:
%Vor%Dieser Code ist falsch und hat ein falsches Verhalten:
%Vor% Dies scheint in diesem erfundenen Beispiel vielleicht kein signifikanter Unterschied zu sein, zumal counter
normalerweise nur als volatile
markiert werden kann. In einem realen Beispiel, in dem die Setter-Methode eine kompliziertere Logik hat und von vielen verschiedenen Stellen aufgerufen wird (nicht nur von einer Instanzmethode), ist das letztere Muster einfacher zu refaktorieren.
Nebenbei bemerkt, meiner Meinung nach Google CodePro Analytix Plugin ist viel schneller und ein umfassenderes Werkzeug als FindBugs.
Verwandte:
Aus der FindBugs-Liste von Fehlerbeschreibungen :
ST: Schreiben Sie in das statische Feld von der Instanzmethode (ST_WRITE_TO_STATIC_FROM_INSTANCE_METHOD)
Diese Instanzmethode schreibt in ein statisches Feld. Das ist schwierig zu bekommen Korrigieren, wenn mehrere Instanzen manipuliert werden, und im Allgemeinen schlecht üben.
Es gibt keine ähnliche Fehlerbeschreibung für den Zugriff auf ein statisches Feld über eine statische Methode, die von einer Instanzmethode aufgerufen wird.
Sie können die Gründe für diese Entscheidung auf der FindBugs-Mailingliste diskutieren
Tags und Links java static-methods findbugs static-members