【问题标题】:Unused method parameters should be removed (squid:S1172) false positive using lambda应使用 lambda 删除未使用的方法参数 (squid:S1172) 误报
【发布时间】:2020-07-10 12:43:54
【问题描述】:

我有一个使用参数作为 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 参数时是否存在真正的问题或误报检查?

【问题讨论】:

    标签: java lambda sonarlint false-positive method-parameters


    【解决方案1】:

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

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

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

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

    【讨论】:

      【解决方案2】:

      问题是真实的。这个方法返回一个BiConsumer,它在一对或List&lt;String&gt;Properties参数上运行executeSubList,但不管p如何。你可以删除它:

      private BiConsumer<List<String>, Properties> handleList() {
          // p was never used, and can just be removed -------^
          return (list, prop) -> executeSubList(list, prop);
      }
      

      【讨论】:

      • 很好,问题是真实存在的 - 但它是另一个问题(应该是“未使用的参数”)。
      • @user7294900 BiConsumer 消耗两个东西,因此得名。因此,该方法会返回一个对象,该对象可用于使用List&lt;String&gt;Properties。所以BiConsumer&lt;List&lt;String, Properties&gt; consumer = handleList(); 然后consumer.accept(myList, myProperties);
      猜你喜欢
      • 2016-01-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-06
      • 2015-11-11
      • 2018-08-08
      • 1970-01-01
      相关资源
      最近更新 更多