-1

我有一个使用参数作为 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)

如果我更改propp我收到编译错误

Lambda 表达式的参数 p 不能重新声明在封闭范围内定义的另一个局部变量

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

4

2 回答 2

4

这个问题是真实的。此方法返回在一对 or和参数上BiConsumer运行的 a ,但不管. 您可以将其删除:executeSubListList<String>Propertiesp

private BiConsumer<List<String>, Properties> handleList() {
    // p was never used, and can just be removed -------^
    return (list, prop) -> executeSubList(list, prop);
}
于 2020-03-30T07:13:40.933 回答
3

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

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

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

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

于 2020-03-30T07:58:32.917 回答