【问题标题】:Checkstyle: How to Resolve "Hidden Field" ErrorCheckstyle:如何解决“隐藏字段”错误
【发布时间】:2011-12-08 05:30:42
【问题描述】:

我收到此检查样式错误:

'serverURL' hides a field

在这个

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

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

【问题讨论】:

    标签: java eclipse checkstyle


    【解决方案1】:

    已经定义了一个变量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;
      }
    }
    

    【讨论】:

    • 如你所见方法是静态的,我不能使用这个
    • @CoryKendall 你对这个问题的解决方案是什么?
    • 解决方案是关闭检查,或者将bars 之一的名称更改为其他名称。
    • 可以通过指定如何关闭该检查样式来改进此答案。
    【解决方案2】:

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

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

    这样其他隐藏字段的情况还是被禁止的。

    【讨论】:

    • 在我的 checkstyle xml 文件中仍然无法使用上述属性。
    【解决方案3】:

    参数和静态字段同名。只需重命名其中一个。 有些人遵循命名约定,所有参数都以p 为前缀。然后您将有 serverURL 作为字段名称和 pServerURL 作为参数名称。 或者您可以简单地关闭检查。

    【讨论】:

      【解决方案4】:

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

      打开

      Eclipse>首选项>检查样式

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

      编码问题>隐藏字段

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

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

      【讨论】:

      • 由于某种原因,我的检查样式在“编码问题”下有多个“隐藏字段”选项。我禁用了所有这些,然后只启用了一个并按照上面的说明进行操作,它起作用了。想要做一个插件澄清,以防其他人有同样的问题。
      • 修复代码而不是打开检查器怎么样?见 Cory Kendall 的回答
      • @Hannes 当然。这正是 checkstyle 向用户建议的解决方案。然而,登陆这个页面的人正在寻找方法让 checkstyle 停止警告。
      【解决方案5】:

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

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

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

      享受...

      吉格·帕特尔

      【讨论】:

      • 啊啊啊啊啊啊啊!
      【解决方案6】:

      有点愚蠢的错误,但这是我在设置器中放置的简单修复方法:

      曾经:

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

      更新:

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

      【讨论】:

        猜你喜欢
        • 2011-02-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-06-12
        • 1970-01-01
        • 2013-04-06
        • 2011-07-25
        相关资源
        最近更新 更多