Java 尝试使用多个资源会导致声纳qube问题

Java 尝试使用多个资源会导致声纳qube问题,java,java-8,sonarqube,Java,Java 8,Sonarqube,请参阅代码片段 try (InputStream inputStream = this.getClass().getClassLoader()                 .getResourceAsStream("hello.txt"); BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream))) { 但是sonarQube以下投诉上列有错误   正确性-以前取消引用的值的

请参阅代码片段

try (InputStream inputStream = this.getClass().getClassLoader()
                .getResourceAsStream("hello.txt");
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream))) {
但是
sonarQube
以下投诉上列有错误  

正确性-以前取消引用的值的空检查(以BufferedReader开头的行)

请帮助解决此问题

这是因为
getClassLoader().getResourceAsStream(“hello.txt”)
可以返回
null
,您在创建
BufferedReader
之后使用它,而不检查null值。

我认为这不是正确的行。该错误表示您正在执行空检查,但已访问该变量。你能显示更多的代码吗?你在检查try正文中任何地方的
inputStream
是否为空吗?我想,这是因为代码分析器使用编译后的代码,在try with resource的情况下,有无法访问的代码和冗余检查。但是,如果这是问题的原因,那么好消息是,在更新到JDK 11时,即使在为
--release 8
编译时,也可以去掉它。顺便说一句,您应该使用
this.getClass().getResourceAsStream(“/hello.txt”)
,而不是使用类加载器。这样,访问与模块化软件兼容,因为类加载器可能有多个模块,但您通常使用类的模块来引用资源。实际上,如果您不打算在为子类执行时允许解析不同的资源,则应该使用<代码> StudialCaseNAME.CaseGETRealSu水流(“/Hello .txt”)。因此,在这种情况下,我不能使用REST资源。考虑使用方法“AnnUdCuldEL”,在<代码>文件< /代码>中的方法对文件是有好处的,不适用于资源。事实上,您可以将
getResourceAsStream
移动到
try
上方并检查空值