声纳规则:Lambdas应该用方法引用替换

时间:2018-05-16 06:41:08

标签: java sonarqube

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

目前看来如下:

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

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

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

所以声纳很满意,一切看起来都一样。但它不再等效,因为new SubscriptionJavaLite在不同时间执行:

案例1运行rxTransaction - >新的SubscriptionJavaLite

案例2执行新的SubscriptionJavaLite - > rxTransaction。差不多早了。

是否有可能以不同的方式解决案件?这个发现只是声纳规则的一个错误吗? 现在我不想在所有地方都写出SupressWarning。

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

这确实是通过实施规则squid:S1612无法正确处理的情况。

我建议你将此标记为误报(FP)而不是修复它。正如你正确提到的那样,两种情况都不完全相同,因此规则不应该引起问题。有关这些案例不相同的原因的详细信息,请参阅JLS §15.13 - Method Reference Expressions

以下故障单将修复实施:SONARJAVA-2763