gpt4 book ai didi

java - Sonar 规则 : Lambdas should be replaced with method references

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:47:28 25 4
gpt4 key购买 nike

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

当前调用如下所示:

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

我第一个幼稚的想法(也是 Intellij 的建议)是使用以下方法引用:

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

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

案例 1 运行 rxTransaction -> new SubscriptionJavaLite

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

有没有可能以不同的方式解决这个问题?这个发现只是 Sonar 规则的一个错误吗?现在我不想在所有情况下写 SupressWarning。

感谢您的帮助。

最佳答案

这确实是一个没有被规则 squid:S1612 正确处理的案例.

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

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

关于java - Sonar 规则 : Lambdas should be replaced with method references,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50363994/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com