首页 > 解决方案 > 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;
}

当一个方法被设计为返回一个不变的值时,它可能是糟糕的设计,但它不应该对你的程序的结果产生负面影响。但是,当它发生在逻辑的所有路径上时,它肯定是一个错误。

当一个方法包含多个返回相同值的返回语句时,此规则会引发问题。

我不认为这个警告在这种情况下是正确的,你怎么看?你会有不同的方法吗?

标签: javasonarqube

解决方案


出色地,

当一个方法包含多个返回相同值的返回语句时,此规则会引发问题。

Sonar 报告它抱怨所有返回语句都具有相同的返回值。您的代码确实包含(至少)两个这样的语句:

if (obj == null) { return true }
...
return true;

我认为你在那里漏掉了一个分号,但那是另一回事了。

您至少可以将其重写为:

if (obj != null) {
   ...
}
return true;

现在看看投诉是否消失。如果它没有消失,那么您无能为力。正如 Federico在评论中已经指出的那样,Sonar 是一个非常好的工具,但它不是圣杯。在某些情况下,您必须告诉 Sonar 这是唯一的方法。


关于一些评论说您应该将返回类型更改为void- 我会建议您这样做,但您不能这样做,或者当然,如果您是从超类型覆盖的。(我在这里假设你是压倒一切的android.os.Handler.Callback.handleMessage(Message))。


推荐阅读