我收到此检查样式错误:
'serverURL' hides a field
在这个
private static void setServerURL(final String serverURL) {
Utility.serverURL = serverURL;
}
可能是什么原因,如何解决?
已经定义了一个变量
serverURL
,该变量可用于此方法(除了您接受的形式参数之外)。这就是所谓的“阴影”。
我认为大多数 Java 程序员都会关闭此检查,因为它并不是那么令人困惑。
例如,这会触发错误:
public class Foo {
private int bar = 0;
public void someMethod(int bar) {
// There are two bars! All references in this method will use the parameter bar,
// unless they are explicitly prefixed with 'this'.
this.bar = bar;
}
}
我认为在构造函数和setter中设置字段名称与setter参数名称相同是很常见的。这就是我推荐这个配置的原因:
<module name="HiddenField" >
<property name="ignoreSetter" value="true" />
<property name="ignoreConstructorParameter" value="true" />
</module>
这样其他隐藏字段的情况仍然被禁止。
参数和静态字段同名。只需重命名其中之一即可。 有些人遵循命名约定,在所有参数前加上
p
前缀。然后,您将使用 serverURL
作为字段名称,并将 pServerURL
作为参数名称。
或者您可以简单地关闭检查。
我通过在 Eclipse 中禁用它来解决它。当我登陆此页面时,我正在寻找如何做到这一点。我没有在前 10 名谷歌查询中找到答案,所以我不得不以艰难的方式找出答案。对于正在寻找的人,我是这样做的:
打开
Eclipse>首选项>Checkstyle
找到您正在使用的 checkstyle 配置(您可能已经设置了该配置,或者您正在使用默认值,在这种情况下,最好创建您自己的副本,然后对其进行编辑)。选择它,然后单击右侧的配置按钮。在列表中找到以下配置:
编码问题>隐藏字段
打开配置(UI 中有一个名为“打开”的按钮)。
取消选择“参数声明”。单击“确定”,然后单击“确定”,然后单击“确定”。
只需更改方法中的参数名称
private static void setServerURL(final String serverURL) {
Utility.serverURL = serverURL;
}
到
private static void setServerURL(final String serverURLXYZ) {
Utility.serverURL = serverURLXYZ;
}
享受...
吉加尔·帕特尔
有点愚蠢的错误,但这是我在设置器中放置的简单修复程序来修复它:
是:
public void setName(String name) {
this.name = name;
}
更新:
public void setName(String val) {
this.name = val;
}
我阅读了文档:
解决方案如下:
<module name="HiddenField">
<property name="tokens" value="VARIABLE_DEF"/>
</module>
如果已有 HiddentField 标签,则添加 tokens 属性。
我遇到了类似的问题,通过此修复,一切正常。