SonarQube——可以通过提示使其静音吗?
SonarQube -- can it be silenced with a hint?
我想找到一种方法来提示 SonarQube,这样它就不会对某些代码片段发出警告。
Example1: "empty statement block can be removed" -- 实际上是无法删除的:
static void closeNX (java.io.FileInputStream is) {
try {
is.close ();
} catch (Exception e) {} <Warning comes here>
}
(编辑:当 is.read
或 is.write
已经抛出异常时调用此方法,因此不再需要来自 is.close
的任何异常。)
示例 2:finalize
已弃用,因为即使您的库的用户忘记调用 close
/dispose
,内存最终也会被释放——但是本机资源(已打开文件,套接字,IPC,等等)不会被释放,这就是为什么例如 java.io.FileInputStream
确实有 finalize
方法:
protected void finalize() throws IOException {
if ((fd != null) && (fd != FileDescriptor.in)) {
close();
}
}
(编辑:即使有 finalize
也不能保证如果用户不调用 close
/dispose
将释放本机资源;但没有 finalize
确实保证如果用户不调用 close
/dispose
)
则原生资源不会被释放
要使消息静音,您可以通过为特定文件配置 quality profile, or you can add an exclusion 来配置在 SonarQube 中启用哪些规则。
第三种方法是在有问题的行上添加// NOSONAR
评论。但是,通过这种方式您可以忽略所有规则。
现在关于您提供的示例 - 无法删除空的 catch 块,但是,它被认为是代码异味。也许至少应该记录一个异常?更多讨论请看这里 Why are empty catch blocks a bad idea?
对于finalize,使用它们来释放资源不是一个好主意,因为无法保证finalize 何时被调用或者是否会被调用。最好显式释放资源,而不是依赖垃圾回收来调用 finalize。您可以在 JDK 中检查这些错误,为什么甚至 Java 作者也不喜欢在 java.io.FileInputStream
https://bugs.openjdk.java.net/browse/JDK-8187325 , https://bugs.openjdk.java.net/browse/JDK-8212050
中使用 finalize
我想找到一种方法来提示 SonarQube,这样它就不会对某些代码片段发出警告。
Example1: "empty statement block can be removed" -- 实际上是无法删除的:
static void closeNX (java.io.FileInputStream is) {
try {
is.close ();
} catch (Exception e) {} <Warning comes here>
}
(编辑:当 is.read
或 is.write
已经抛出异常时调用此方法,因此不再需要来自 is.close
的任何异常。)
示例 2:finalize
已弃用,因为即使您的库的用户忘记调用 close
/dispose
,内存最终也会被释放——但是本机资源(已打开文件,套接字,IPC,等等)不会被释放,这就是为什么例如 java.io.FileInputStream
确实有 finalize
方法:
protected void finalize() throws IOException {
if ((fd != null) && (fd != FileDescriptor.in)) {
close();
}
}
(编辑:即使有 finalize
也不能保证如果用户不调用 close
/dispose
将释放本机资源;但没有 finalize
确实保证如果用户不调用 close
/dispose
)
要使消息静音,您可以通过为特定文件配置 quality profile, or you can add an exclusion 来配置在 SonarQube 中启用哪些规则。
第三种方法是在有问题的行上添加// NOSONAR
评论。但是,通过这种方式您可以忽略所有规则。
现在关于您提供的示例 - 无法删除空的 catch 块,但是,它被认为是代码异味。也许至少应该记录一个异常?更多讨论请看这里 Why are empty catch blocks a bad idea?
对于finalize,使用它们来释放资源不是一个好主意,因为无法保证finalize 何时被调用或者是否会被调用。最好显式释放资源,而不是依赖垃圾回收来调用 finalize。您可以在 JDK 中检查这些错误,为什么甚至 Java 作者也不喜欢在 java.io.FileInputStream
https://bugs.openjdk.java.net/browse/JDK-8187325 , https://bugs.openjdk.java.net/browse/JDK-8212050