我的應用程序中有幾個區域,在處理來自實例方法的靜態變量值時出現錯誤。FindBugs錯誤:從實例方法寫入靜態字段
「從實例方法寫入靜態字段」。
如果我們將多線程排除在等式之外,即使多個實例寫入相同的static
變量,此方案是否也會帶來任何潛在問題?
我的應用程序中有幾個區域,在處理來自實例方法的靜態變量值時出現錯誤。FindBugs錯誤:從實例方法寫入靜態字段
「從實例方法寫入靜態字段」。
如果我們將多線程排除在等式之外,即使多個實例寫入相同的static
變量,此方案是否也會帶來任何潛在問題?
從文檔...
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);
}
}
檢查這個SO問題http://stackoverflow.com/q/3630485/1686291。 –
我特別想知道什麼時候不涉及線程,如果這種情況可能會產生任何問題..一些解釋會很好。 – Baz