Java 对已知为非空值或findbugs中可能存在的错误的值进行冗余nullcheck

Java 对已知为非空值或findbugs中可能存在的错误的值进行冗余nullcheck,java,findbugs,Java,Findbugs,代码如下: public static String readFile(InputStream is) { try (Scanner scanner = new Scanner(is); Scanner delimitedScanner = scanner.useDelimiter("\\A");) { return scanner.hasNext() ? scanner.next() : ""; } } findbugs插件说

代码如下:

public static String readFile(InputStream is) {

        try (Scanner scanner = new Scanner(is); Scanner delimitedScanner = scanner.useDelimiter("\\A");) {
            return scanner.hasNext() ? scanner.next() : "";
        }
    }
findbugs插件说:

此方法包含的已知非null值的冗余nullcheck 针对常量nul对已知非空值进行冗余检查

关于这一点:

return scanner.hasNext() ? scanner.next() : "";
        } //this line contains bug!!!
    }
请看图片:

eclipse显示了相同的警告:


try with resources结构混淆了直接查看字节码的代码分析器和覆盖率工具。在try with resources块的末尾,将生成大量额外的字节码,这些字节码将以大括号结尾作为行号

显然FindBugs似乎认为这是个问题。然而,情况几乎肯定不是这样


覆盖工具也会发生同样的情况,即使块被完全覆盖,但它们声称并非所有分支都被覆盖。这是因为try-with-resources块添加了对异常情况或资源为null的处理,而这些异常情况或资源为null的情况实际上无法通过例如单元测试得到正确的覆盖。

问题在于JDK将try-with-resources重写到表单中:

Scanner scanner = null try { scanner = new Scanner(is); } finally { if (null != scanner) {try {scanner.close();} catch (Exception e) {...}} } 扫描仪=空 试一试{ 扫描仪=新扫描仪(is); }最后{ 如果(null!=scanner){try{scanner.close();}catch(异常e){…} } 看起来这应该已经被修复了,所以请检查你的findbugs插件版本。
()

您使用什么版本的findbug?我的pom.xml中有3.0.4版本,但您使用的是集成到IDE中的findbug。检查Eclipse设置中的插件版本,我还使用finbugs maven插件来防止生成错误代码。第一张图片来自mvn findbugs:gui.Ok,我知道了。创建
扫描仪定界符dscanner=Scanner.useDelimiter(\\A)的目的是什么如果没有使用它?