Неиспользуемые параметры метода должны быть удалены (squid: S1172). - PullRequest
0 голосов
/ 30 марта 2020

У меня есть рабочий метод, который использует параметр как лямбда-выражение

private BiConsumer<List<String>, Properties> handleList(Properties p) {
    return (list, prop) -> executeSubList(list, prop);
}

Для p Я получаю предупреждение о ложном срабатывании от SonarLint

Unused method parameters should be removed (squid:S1172)

Если я изменяю prop до p Я получаю ошибку компиляции

Параметр лямбда-выражения p не может переопределить другую локальную переменную, определенную в прилагаемой области видимости

Существует ли реальная проблема или это ложная положительная проверка при использовании параметра метода в качестве параметра лямбда?

Ответы [ 2 ]

4 голосов
/ 30 марта 2020

Проблема реальна. Этот метод возвращает BiConsumer, который запускает executeSubList для пары или List<String> и Properties аргументов, но делает это независимо от p. Вы можете просто удалить его:

private BiConsumer<List<String>, Properties> handleList() {
    // p was never used, and can just be removed -------^
    return (list, prop) -> executeSubList(list, prop);
}
3 голосов
/ 30 марта 2020

Принятый ответ является полностью правильным.

Однако другой способ решения этой проблемы - создать Consumer вместо BiConsumer. Параметр p будет затем использоваться в качестве параметра для executeSubList():

private Consumer<List<String>> handleList(Properties p) {
  return (list) -> executeSubList(list, p);
}

Является ли это или решение, представленное в принятом ответе, лучшим способом для go, зависит от того, как окружающие код выглядит и как метод будет использоваться.

...