java - SonarQube 警告“方法返回不应该是不变的”
问题描述
SonarQube 说执行以下操作是错误的:
@Override
public boolean android.os.Handler.Callback.handleMessage(Message msg)
{
super.handleMessage(msg);
Object obj = getXY();
if (obj == null) { return true; }
...
...
...
...
...
...
return true;
}
当一个方法被设计为返回一个不变的值时,它可能是糟糕的设计,但它不应该对你的程序的结果产生负面影响。但是,当它发生在逻辑的所有路径上时,它肯定是一个错误。
当一个方法包含多个返回相同值的返回语句时,此规则会引发问题。
我不认为这个警告在这种情况下是正确的,你怎么看?你会有不同的方法吗?
解决方案
出色地,
当一个方法包含多个返回相同值的返回语句时,此规则会引发问题。
Sonar 报告它抱怨所有返回语句都具有相同的返回值。您的代码确实包含(至少)两个这样的语句:
if (obj == null) { return true }
...
return true;
我认为你在那里漏掉了一个分号,但那是另一回事了。
您至少可以将其重写为:
if (obj != null) {
...
}
return true;
现在看看投诉是否消失。如果它没有消失,那么您无能为力。正如 Federico在评论中已经指出的那样,Sonar 是一个非常好的工具,但它不是圣杯。在某些情况下,您必须告诉 Sonar 这是唯一的方法。
关于一些评论说您应该将返回类型更改为void
- 我会建议您这样做,但您不能这样做,或者当然,如果您是从超类型覆盖的。(我在这里假设你是压倒一切的android.os.Handler.Callback.handleMessage(Message)
)。
推荐阅读
- azure-resource-manager - 用于删除 ARM 部署历史记录的逻辑应用
- java - 将现有 Maven 项目导入 Eclipse 时出现多个 Java 问题错误
- css - 每 N 行交替多行颜色并重复
- python - 如何在不删除以前的数据库的情况下将 Django 应用程序指向新数据库?
- python - 如何将用户输入添加到字典
- c++ - 请解释以下 C++ 语法
- android - OpenWeatherMap API 和 null Weather 对象
- java - 如何在项目反应堆中设置阻塞异步请求/响应?
- r - 使用管道运算符调用匿名函数
- python-3.x - 在 plt.title 中组合字符串和变量