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

Unused method parameters should be removed (squid:S1172) false positive using lambda

我有一个使用参数作为 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 expression's parameter p cannot redeclare another local variable defined in an enclosing scope

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

这个问题是真实的。此方法 returns 一个 BiConsumer 在一对或 List<String>Properties 参数上运行 executeSubList,但不管 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);
}

此方法或已接受答案中提供的解决方案是否是最佳方法取决于周围代码的外观以及该方法的使用方式。