【发布时间】:2019-12-20 22:11:11
【问题描述】:
请看代码sn-p
try (InputStream inputStream = this.getClass().getClassLoader()
.getResourceAsStream("hello.txt");
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream))) {
但是sonarQube 投诉在上面的行下面的错误
正确性 - 先前取消引用的值的 Nullcheck(以 BufferedReader 开头的行)。
请帮助解决此问题
【问题讨论】:
-
我认为这不是正确的行。该错误意味着您正在执行空检查,但已经访问了该变量。你能显示更多代码吗?
-
您是否在 try 正文中的任何位置检查
inputStream的空值? -
我猜,那是因为代码分析器使用编译后的代码,并且在 try-with-resource 的情况下,it’s a mess 具有无法访问的代码和冗余检查。但是,如果这是您的问题的原因,那么好消息是您在更新到 JDK 11 时可以摆脱它,即使在为
--release 8编译时也是如此。 -
顺便说一句,你应该使用
this.getClass() .getResourceAsStream("/hello.txt")而不是通过类加载器。这样,访问与模块化软件兼容,因为类加载器可能有多个模块,但您通常指的是具有类模块的资源。实际上,如果您不打算在为子类执行时允许解析到不同的资源,您应该使用ActualClassName.class .getResourceAsStream("/hello.txt")。