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)的目的是什么代码>如果没有使用它?