In statisches Feld schreiben - ist FindBugs in diesem Fall falsch?

8

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:

ändere %Vor%

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?

    
htorque 14.11.2012, 22:57
quelle

2 Antworten

13

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:

dbyrne 14.11.2012, 23:08
quelle
4

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

    
barrowc 14.11.2012 23:12
quelle