Checkstyle:如何解决“隐藏字段”错误

问题描述 投票:0回答:7

我收到此检查样式错误:

'serverURL' hides a field

在这个

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

可能是什么原因,如何解决?

java eclipse checkstyle
7个回答
63
投票

已经定义了一个变量

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;
  }
}

53
投票

我认为在构造函数和setter中设置字段名称与setter参数名称相同是很常见的。这就是我推荐这个配置的原因:

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

这样其他隐藏字段的情况仍然被禁止。


11
投票

参数和静态字段同名。只需重命名其中之一即可。 有些人遵循命名约定,在所有参数前加上

p
前缀。然后,您将使用
serverURL
作为字段名称,并将
pServerURL
作为参数名称。 或者您可以简单地关闭检查。


7
投票

我通过在 Eclipse 中禁用它来解决它。当我登陆此页面时,我正在寻找如何做到这一点。我没有在前 10 名谷歌查询中找到答案,所以我不得不以艰难的方式找出答案。对于正在寻找的人,我是这样做的:

打开

Eclipse>首选项>Checkstyle

找到您正在使用的 checkstyle 配置(您可能已经设置了该配置,或者您正在使用默认值,在这种情况下,最好创建您自己的副本,然后对其进行编辑)。选择它,然后单击右侧的配置按钮。在列表中找到以下配置:

编码问题>隐藏字段

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

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


6
投票

只需更改方法中的参数名称

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

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

享受...

吉加尔·帕特尔


0
投票

有点愚蠢的错误,但这是我在设置器中放置的简单修复程序来修复它:

是:

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

更新:

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

0
投票

我阅读了文档:

https://checkstyle.sourceforge.io/apidocs/com/puppycrawl/tools/checkstyle/checks/coding/HiddenFieldCheck.html

解决方案如下:

<module name="HiddenField">
   <property name="tokens" value="VARIABLE_DEF"/>
 </module>

如果已有 HiddentField 标签,则添加 tokens 属性。

我遇到了类似的问题,通过此修复,一切正常。

© www.soinside.com 2019 - 2024. All rights reserved.