应使用 lambda 删除未使用的方法参数 (squid:S1172) 误报



我有一个使用参数作为lambda表达式的工作方法

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则会出现编译错误

Lambda 表达式的参数 p 无法重新声明封闭作用域中定义的另一个局部变量

使用方法参数作为 lambda 参数时是否存在真正的问题或误报检查?

问题是真实的。此方法返回一个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);
}

接受的答案是完全正确的。

但是,解决此问题的另一种方法是创建Consumer而不是BiConsumer。然后,参数p将用作参数来executeSubList()

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

这个或接受的答案中提供的解决方案是最好的方法,取决于周围代码的外观以及方法的使用方式。

相关内容

  • 没有找到相关文章

最新更新