#java #eclipse #checkstyle
#java #eclipse #checkstyle
Вопрос:
Я получаю эту ошибку checkstyle:
'serverURL' hides a field
в этом
private static void setServerURL(final String serverURL) {
Utility.serverURL = serverURL;
}
В чем может быть причина и как ее устранить?
Ответ №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;
}
}
Комментарии:
1. Как вы видите, метод статический, я не могу использовать это
2. @CoryKendall Что вы предлагаете для решения этой проблемы?
3. Решение состоит в том, чтобы отключить проверку или заменить имя одного из
bar
s на что-то другое.4. Этот ответ можно улучшить, указав, как отключить этот checkstyle.
Ответ №2:
Я думаю, что в конструкторах и установщиках очень часто заданное имя поля совпадает с именем параметра установщика. Вот почему я рекомендую эту конфигурацию:
<module name="HiddenField" >
<property name="ignoreSetter" value="true" />
<property name="ignoreConstructorParameter" value="true" />
</module>
Таким образом, другие случаи скрытого поля по-прежнему запрещены.
Комментарии:
1. все еще не работает с вышеуказанными свойствами в моем XML-файле checkstyle.
Ответ №3:
Параметр и статическое поле имеют одинаковое имя. Просто переименуйте один из них. Некоторые люди следуют соглашению об именовании, которое добавляет ко всем параметрам префикс p
. Тогда у вас было бы serverURL
имя поля и pServerURL
имя параметра. Или вы могли бы просто отключить проверку.
Ответ №4:
Я решил ее, отключив в eclipse. Я искал, как это сделать, когда попал на эту страницу. Я не нашел ответа в топ-10 запросов Google, поэтому мне пришлось разобраться с этим на собственном опыте. Для тех, кто ищет это, вот как я это сделал:
Открыть
Eclipse> Настройки> Checkstyle
Найдите конфигурацию checkstyle, которую вы используете (возможно, вы установили ее или используете по умолчанию, и в этом случае лучше создать собственную копию, а затем отредактировать ее). Выберите это, а затем нажмите кнопку настроить с правой стороны. Найдите следующую конфигурацию в списке:
Проблемы с кодированием> Скрытое поле
Откройте конфигурацию (в пользовательском интерфейсе есть кнопка «Открыть»).
Снимите флажок «Объявление параметра». Нажмите OK, затем нажмите OK, а затем нажмите OK.
Комментарии:
1. По какой-то причине в моем стиле проверки было несколько параметров «скрытое поле» в разделе «Проблемы с кодированием». Я отключил их все, затем включил только один и следовал инструкциям выше, и это сработало. Хотел сделать плагин для уточнения на случай, если у других возникнет такая же проблема.
2. Как насчет исправления кода, чем отключить проверку? смотрите ответ Кори Кендалла
3. @Ханнес уверен. Это именно то решение, которое checkstyle предлагает пользователю. Однако люди, попадающие на эту страницу, ищут способы заставить checkstyle прекратить предупреждать об этом.
Ответ №5:
Просто измените имя параметра ur в методе ur
private static void setServerURL(final String serverURL) {
Utility.serverURL = serverURL;
}
Для
private static void setServerURL(final String serverURLXYZ) {
Utility.serverURL = serverURLXYZ;
}
Наслаждайтесь…
Джигар Патель
Комментарии:
1. аххххххххххххх!
2. Это не чистое решение 🙂
Ответ №6:
Довольно глупая ошибка, но вот простое исправление, которое я вставил в свои настройки, чтобы исправить это:
было:
public void setName(String name) {
this.name = name;
}
обновлено:
public void setName(String val) {
this.name = val;
}
Комментарии:
1. Это не чистое решение 🙂
2. @th3an0maly С ограничениями checkstyle это самая простая вещь, которую я мог понять. Что вы предлагаете более чистого?