为什么SonarQube会抱怨这部分代码?
SonarQube说: 更改此条件,以便它不会始终评估为" false"
然而,我似乎无法理解为什么这种情况总是错误的?事实上,实际上并非如此,我只是在调试模式下再次重新使用此部分并且它完美地运行,它确实进入内部,并且大多数情况下条件都不是假的。
这是代码部分:
} finally {
if ((inboxFolder != null) && (inboxFolder.isOpen())) {
try {
inboxFolder.close(true);
} catch (MessagingException e) {
log.error(e.getMessage(), e);
}
}
if ((store != null) && (store.isConnected())) {
try {
store.close();
} catch (MessagingException e) {
log.error(e.getMessage(), e);
}
}
}
当尝试使用javax.email接收电子邮件时,它是try-catch的最后一部分,如果有条件,它会抱怨这两种情况。
这是这些变量的声明,它们在try部分实例化:
Folder inboxFolder = null;
Store store = null;
为什么SonarQube抱怨这个?
答案 0 :(得分:1)
我们遇到类似的误报,产生错误'更改此条件,以便它不会总是评估为" false"'。 有问题的代码如下:
public Properties getProperties() {
Properties properties = new Properties();
InputStream in = getClass().getResourceAsStream("/my.properties");
IllegalStateException streamCloseError = null;
try {
if (in != null) {
try {
properties.load(in);
} catch (Exception e) {
//fall through...
}
}
} finally {
try {
if (in != null) {
in.close();
}
} catch (IOException e) {
streamCloseError = new IllegalStateException(e);
}
}
if (streamCloseError != null) {
throw streamCloseError;
}
return properties;
}
错误行在if (streamCloseError != null) {
行上。
在阅读了有关使用上述try-with-resources之后,我们清理了这段代码。
使用此规则是否可以检测它是否与"关闭"如果有,请提供使用try-with-resources的提示?
感谢您考虑这一点。