【问题标题】:Sonar rule: Lambdas should be replaced with method references声纳规则:Lambdas 应该替换为方法引用
【发布时间】:2018-05-17 15:28:29
【问题描述】:

目前我正在测试一些新的声纳规则。随着新的声纳规则出现了新的代码气味。 “应将 Lambda 替换为方法引用”。 我认为这条规则很酷,但有 1 个案例我有一些问题 我举个例子,也许有人可以解释一下这个案例:

当前调用如下所示:

rxTransaction( () -> new SubscriptionJavaLite( subscription ).toSubscription());

我第一个天真的想法(也是 Intellij 的建议)是使用以下方法参考:

rxTransaction( new SubscriptionJavaLite( subscription )::toSubscription);

Sonar 很满意,一切看起来都一样。但它不再等价,因为new SubscriptionJavaLite 是在不同的时间执行的:

案例 1 运行 rxTransaction -> 新的 SubscriptionJavaLite

案例 2 执行新的 SubscriptionJavaLite -> rxTransaction。几乎更早。

是否有可能以不同的方式解决此案?这个发现只是声纳规则的一个错误吗? 现在我不想在各地的情况下写 SupressWarning。

感谢您的帮助。

【问题讨论】:

  • 感谢这些非常有用的 cmets。 @SirWayne 您能否提供您在 SonarQube 实例中使用的 SonarJava 版本和规则键?
  • 感谢您的快速回复:)。规则是 squid:S1612 SonarQube 是 6.7。 SonarJava 5.0.1

标签: java sonarqube


【解决方案1】:

这确实是执行规则squid:S1612没有正确处理的情况。

我建议您将此标记为误报 (FP) 而不要修复它。就像您正确提到的那样,这两种情况根本不等效,因此该规则不应在此处提出问题。有关为什么这些情况不等价的更多详细信息,请参阅JLS §15.13 - Method Reference Expressions

以下票证将修复实施:SONARJAVA-2763

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-10-25
    • 2015-07-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-30
    相关资源
    最近更新 更多