2014-01-15 60 views
8

我的應用程序中有幾個區域,在處理來自實例方法的靜態變量值時出現錯誤。FindBugs錯誤:從實例方法寫入靜態字段

「從實例方法寫入靜態字段」

如果我們將多線程排除在等式之外,即使多個實例寫入相同的static變量,此方案是否也會帶來任何潛在問題?

+0

檢查這個SO問題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.

  • 首先,它說,這是一個不好的做法,不是不正確。
  • 第二件事是個問題,關於構成任何潛在問題

    如果你操縱從實例方法,類的任何對象(類,它包含我們的實例方法)一個static字段可以調用該方法時,它會很難找到在某些大型應用程序或應用程序中操縱static字段的對象,這些應用程序或應用程序已由其他人開發和編碼。

This Answer也可以幫助你。

編輯:

僅供參考,您可以繞過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

相關問題