带捕获块的 SonarQube 规则"Methods returns should not be invariant"



我使用的是最新的SonarQube服务器9.4,它不断报告"重构此方法以不总是返回相同的值"。- java:S3516的代码段如下:

try
{
FileUtils.moveFile(dcomExportFile, destination);
}
catch(IOException e)
{
Logger.error(this, "Could not move file {} to {}, future job runs might fail as well",
dcomExportFile.getAbsolutePath(), destination.getAbsolutePath());
return false;
}
return true;

这很奇怪,因为方法FileUtils。moveFile可以抛出IOException,在这种情况下方法返回false。

任何想法?

谢谢!

我会将return false语句移动到catch的外部和之后(现在返回true)。并将return true移动到try块中的Fileutils调用之后,如下所示:

try
{
FileUtils.moveFile(dcomExportFile, destination);
return true;
}
catch(IOException e)
{
Logger.error(this, "Could not move file {} to {}, future job runs might fail as well",
dcomExportFile.getAbsolutePath(), destination.getAbsolutePath());
}
return false;

无论如何,从catch块中返回是令人困惑的,而且可以说是糟糕的风格。

我不确定在这种情况下不让异常被抛出是一个好主意,因为这似乎是我想要冒泡的那种错误,在那里有一个返回值让它很容易丢失。如果记录错误是代码处理这个问题的唯一方法,也许还没有那么糟糕。

我认为仅仅抓住&日志异常&返回false。你可能需要向方法的调用者抛出异常。

我想到的好例子是list.add(..),如果操作成功,它返回true,但在任何失败的情况下,它抛出异常给调用者,而不是返回false

我找到了解决方案-使用正确的sonar.java.libraries路径扫描可以解决此问题。

最新更新