2014-01-15 44 views
8

インスタンスメソッドから静的変数の値を操作しているときにエラーが発生するアプリケーションがいくつかあります。FindBugsエラー:インスタンスメソッドから静的フィールドへの書き込み

「インスタンスメソッドから静的フィールドに書き込む」

複数のスレッドが同じ種類の変数に書き込む場合でも、このシナリオでは潜在的な問題が発生しますか?ドキュメントから

+0

この問題はhttp://stackoverflow.com/q/3630485/1686291で確認してください。 –

+0

私は特に、このシナリオで問題が生じる可能性がある場合は、スレッドが関与していないことを知りたいと思っています。 – Baz

答えて

16

...

This instance method writes to a static field. This is tricky to get correct if multiple instances are being manipulated, and generally bad practice.

  • まずそれは、が、それは正しくない、悪い習慣ではないと言います。
  • 2つ目は

    あなたはインスタンスメソッド、(私たちのインスタンスメソッドを含むクラス)クラスの任意のオブジェクトからstaticフィールドを操作している場合は、そのメソッドを呼び出すことがあり、それは意志の潜在的な問題を装っについて、質問です他の人が既に開発してコード化している大規模なアプリケーションやアプリケーションでは、staticフィールドを操作するオブジェクトを見つけるのは難しいでしょう。

This Answerでもお手伝いできます。

EDIT:

FYI、あなたはコードを以下にfindbugの警告をバイパスすることができます。

class TestClass { 

    static int testInt = 0 ; 

    public static setTestInt (int a) { 
      TestClass.testInt = a ; 
    } 

    public void setInt (int a1) { 
      setTestInt (a1); 
    } 
} 
+0

シングルスレッド環境では、これは問題ではないはずですね。 – Baz

+0

いいえ、場合によってはそうかもしれません。私はあなたが最後の段落を正しく取得していないと思いますか? –

+0

私は、単一スレッドの場合は、静的変数によって参照されるデータの完全性に潜在的な問題があることを意味していますか?そして、あなたの迅速な対応のための方法に感謝します。 – Baz

関連する問題