【发布时间】: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