我有一个使用参数作为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);
}
这个或接受的答案中提供的解决方案是最好的方法,取决于周围代码的外观以及方法的使用方式。