检查样式: 如何解决“隐藏字段”错误

我得到了这个 checkstyle 错误:

'serverURL' hides a field

在这里

 private static void setServerURL(final String serverURL) {
Utility.serverURL = serverURL;
}

原因是什么,如何解决?

107687 次浏览

已经有一个定义为 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;
}
}

参数和静态字段具有相同的名称。只需重命名其中之一。 有些人遵循的变数命名原则是在所有参数前面加上 p。然后您将使用 serverURL作为字段名,使用 pServerURL作为参数名。 或者你可以直接关掉支票。

我在日蚀时解除了它。当我登上这一页的时候,我正在寻找如何做到这一点。我没有找到答案在前10谷歌查询,所以我必须找出它的困难的方式。对于正在寻找这种方法的人来说,我是这样做的:

张嘴

Eclipse > Preferences > Checkstyle

找到您正在使用的检查样式配置(您可能已经设置了它,或者您正在使用默认设置,在这种情况下,最好创建一个您自己的副本,然后编辑它)。选择它,然后单击右侧的 configure 按钮。在列表中查找以下配置:

编码问题 > 隐藏字段

打开配置(UI 中有一个名为“ Open”的按钮)。

取消选择“参数声明”。单击“确定”,然后单击“确定”,再单击“确定”。

只需在方法中更改参数名

private static void setServerURL(final String serverURL) {
Utility.serverURL = serverURL;
}

private static void setServerURL(final String serverURLXYZ) {
Utility.serverURL = serverURLXYZ;
}

好好享受。

Jigar Patel

我认为在构造函数和 setter 中,set 字段名称与 setter 参数名称相同是很常见的。这就是为什么我推荐这种配置:

<module name="HiddenField" >
<property name="ignoreSetter" value="true" />
<property name="ignoreConstructorParameter" value="true" />
</module>

这样其他隐藏的野外案件仍然是禁止的。

有点愚蠢的错误,但是这里有一个简单的修复方法:

曾经是:

public void setName(String name) {
this.name = name;
}

更新:

public void setName(String val) {
this.name = val;
}