2013-03-19 67 views
0

在寫在構造函數中設置實例變量,當我在這個警告是一個參數化的JUnit測試案例:列出靜態類生成警告,其他數據類型不

提供的解決方案是:

@SuppressWarnings("static-access")

ClassA.ListOfStrings = ParamListOfStrings;

代替

this.ListOfStrings = ParamListOfStrings;

此警告發生自定義的對象,以及,但不爲其他的數據類型(或單個String)。爲什麼?

回答

2

它發生在其他數據類型靜態

訪問靜態字段時,最好使用ClassName.fieldName而不是myObj.fieldName

其中一個原因是在將字段更改爲非靜態時出現編譯錯誤。

+0

我完全忽略了我的其他數據類型沒有聲明爲靜態的事實,謝謝指出!我目前有幾個字段作爲靜態(列表,因爲它們將數據添加到靜態'getParameters()'方法中)和幾個字段作爲非靜態(它們正在構造函數中初始化)。建議在這種情況下使所有字段都是靜態的? – 2013-03-19 08:43:06

+0

每個與實例相關的字段都必須是非靜態的。如果你想要與所有實例共享一個字段,你可以使用static(並且可能在構造函數之前實例化它,而不是在它內部實例化)。 – BobTheBuilder 2013-03-19 08:45:32

0

靜態並不完全意味着「被所有實例共享」 - 它表示「根本不涉及特定實例」。換句話說,您可以在類A中獲得靜態字段而不創建任何實例。

你可以做

ClassName.variable; 

,而不是

ClassName cn = new ClassName(); 
cn.variable; 
1

警告無關與靜態變量的類型,但與事實,你有資格你靜態字段訪問表達式與擁有類的實例而不是類的名稱。