gpt4 book ai didi

java - 为什么 FindBugs 在显式抛出 NPE 时会发出严重警告?

转载 作者:行者123 更新时间:2023-12-04 05:05:38 26 4
gpt4 key购买 nike

考虑 FindBugs error desriptions 中的以下内容

NP: Null value is guaranteed to be dereferenced (NP_GUARANTEED_DEREF)

There is a statement or branch that if executed guarantees that a value is null at this point, and that value that is guaranteed to be dereferenced (except on forward paths involving runtime exceptions).

Note that a check such as if (x == null) throw new NullPointerException(); is treated as a dereference of x.



涉及运行时异常的正向路径上的 except 是什么意思?

还有为什么像 if (x == null) throw new
NullPointerException();
这样的支票发出警告?

最佳答案

考虑一下这个可怕的人为代码:

String value = null;
if (5 > 8) {
value = "foo";
}
doSomething();
if (value.equals("foo")) {
System.out.println("value is foo");
}

静态分析可以证明 value将是 nullequals被调用,导致 NullPointerException被抛出。但是,如果调用 doSomething()导致抛出运行时异常,调用 equals永远不会到达。这就是“在涉及运行时异常的正向路径上除外”的含义。

至于您的第二个问题,FindBugs 对此代码发出警告
if (value == null) {
throw new NullPointerException();
}

因为效果与取消引用 null 时的效果相同。值(value)。由于取消引用值得警告,因此任何模仿该取消引用的代码也是如此。

关于java - 为什么 FindBugs 在显式抛出 NPE 时会发出严重警告?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15541795/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com