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

t3psigkw  于 2023-10-18  发布在  Eclipse
关注(0)|答案(7)|浏览(213)

我得到了这个checkstyle错误:

  1. 'serverURL' hides a field

在这

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

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

kyvafyod

kyvafyod1#

已经有一个定义的变量serverURL可用于此方法(除了您接受的形参之外)。这就是所谓的“影子”。
我认为大多数Java程序员都不会使用这种检查,因为它实际上并没有那么令人困惑。
例如,这将触发错误:

  1. public class Foo {
  2. private int bar = 0;
  3. public void someMethod(int bar) {
  4. // There are two bars! All references in this method will use the parameter bar,
  5. // unless they are explicitly prefixed with 'this'.
  6. this.bar = bar;
  7. }
  8. }
7ajki6be

7ajki6be2#

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

  1. <module name="HiddenField" >
  2. <property name="ignoreSetter" value="true" />
  3. <property name="ignoreConstructorParameter" value="true" />
  4. </module>

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

ubby3x7f

ubby3x7f3#

参数和静态字段具有相同的名称。给其中一个重命名。有些人遵循一种命名约定,即所有参数都以p作为前缀。然后你将serverURL作为字段名,pServerURL作为参数名。或者你可以直接关掉支票。

x8diyxa7

x8diyxa74#

我通过在Eclipse中禁用它来解决它。我正在寻找如何做到这一点,当我降落在这一页。我没有找到答案前10名谷歌查询,所以我不得不弄清楚了艰难的道路。对于那些正在寻找的人来说,这就是我是如何做到的:
开放
Eclipse>首选项>检查样式
找到你正在使用的检查样式配置(你可能已经设置了它,或者你正在使用默认值,在这种情况下,创建一个你自己的副本,然后编辑它是一个更好的主意)。选择该选项,然后单击右侧的配置按钮。在列表中找到以下配置:
编码问题>隐藏字段
打开配置(UI中有一个名为“打开”的按钮)。
取消选择“参数声明”。单击OK,然后单击OK,然后单击OK。

6kkfgxo0

6kkfgxo05#

只要在你的方法中修改你的参数名

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

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

享受...
吉加尔·帕特尔

l2osamch

l2osamch6#

我读了文档:
https://checkstyle.sourceforge.io/apidocs/com/puppycrawl/tools/checkstyle/checks/coding/HiddenFieldCheck.html
解决方案如下:

  1. <module name="HiddenField">
  2. <property name="tokens" value="VARIABLE_DEF"/>
  3. </module>

如果已经有一个HiddentField标记,则添加tokens属性。
我有一个类似的问题,与此修复一切工作正常。

alen0pnh

alen0pnh7#

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

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

更新:

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

相关问题