Checkstyle: как устранить ошибку «Hidden Field» - PullRequest
50 голосов
/ 15 октября 2011

Я получаю эту ошибку контрольного стиля:

'serverURL' hides a field

в этом

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

В чем может быть причина и как ее устранить?

Ответы [ 6 ]

46 голосов
/ 15 октября 2011

Уже существует переменная, определенная 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;
  }
}
34 голосов
/ 26 апреля 2015

Я думаю, что в конструкторах и установщиках очень распространено, что имя установленного поля совпадает с именем параметра установщика.Вот почему я рекомендую эту конфигурацию:

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

Таким образом, другие случаи скрытых полей по-прежнему запрещены.

8 голосов
/ 18 октября 2012

Параметр и статическое поле имеют одно и то же имя. Просто переименуйте один из них. Некоторые люди следуют соглашению об именах, которое ставит перед всеми параметрами префикс p. Тогда у вас будет serverURL в качестве имени поля и pServerURL в качестве имени параметра. Или вы можете просто выключить чек.

7 голосов
/ 18 марта 2013

Я решил, отключив его в Eclipse. Я искал, как это сделать, когда попал на эту страницу. Я не нашел ответа в топ-10 запросов Google, поэтому мне пришлось с трудом разобраться. Для того, кто ищет это, вот как я это сделал:

Open

Затмение> Настройки> Checkstyle

Найдите используемую вами конфигурацию контрольного стиля (возможно, вы установили ее или используете по умолчанию, и в этом случае лучше создать собственную копию и затем отредактировать ее). Выберите это, а затем нажмите кнопку настройки на правой стороне. Найдите следующую конфигурацию в списке:

Проблемы с кодированием> Скрытое поле

Открыть конфигурацию (в пользовательском интерфейсе есть кнопка «Открыть»).

Снимите флажок «Объявление параметров». Нажмите кнопку ОК, затем нажмите кнопку ОК, а затем нажмите кнопку ОК.

4 голосов
/ 19 апреля 2014

Просто измените имя параметра в вашем методе

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

на

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

Наслаждайтесь ...

Джигар Патель

0 голосов
/ 10 июля 2019

Какая-то глупая ошибка, но вот простое исправление, которое я вставил в мои сеттеры, чтобы исправить это:

был:

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

Последнее обновление:

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