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
上方并检查空值