2013-03-19 91 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

警告无关与静态变量的类型,但与事实,你有资格你静态字段访问表达式与拥有类的实例而不是类的名称。