简短版本
如何在NetBeans 14 IDE中禁用“不必要的空值测试”警告?
长版本
NetBeans是一个众所周知的错误1234,它会错误地告诉您不需要对null
进行测试。例如,在以下代码中:
import javax.validation.constraints.NotNull;
private void doSomething(@NotNull Object o) {
if (o == null) return;
//...do more stuff...
}
IDE * 认为 *
- 因为
o
参数被标记为@NotNullo
o
不可能是null
- 所以
if
语句肯定是不必要的
这显然是错误的
@NotNull注解只是IDE提示,而不是执行阶段保证。
- 仅仅因为方法的参数标记为@NotNullable
- 并不意味着它不能是
null
您可以通过将null
传递给doSomething
方法来证明这一点。(我们甚至可以编写测试代码,这样IDE就不会生成任何提示或警告!):
Object o = getTestValue();
doSomething(o);
private Object getTestValue()
{
Object o = null;
return o;
}
private void doSomething(@NotNull Object o) {
Objects.requireNonNull(value);
//...do more stuff...
}
并且观察doSomething
方法失败-因为o
是null
-即使它被标记为@NotNull。
现在,可能还有其他@NotNull
的实现,或者其他添加运行时检查的编译器。我不是在谈论这些。NetBeans IDE 14警告是错误的,所以我需要禁用它。
研究工作
1.我试着点击灯泡,希望配置警告:
但它只提供配置 null deference 警告-我肯定要保留。
1.我试着按Alt+Enter来显示更多选项:
但没有任何有价值的出现:
1.我尝试让它将我带到配置Null dereferncing提示的区域:
但它肯定与不必要的null测试无关。
1.我尝试搜索名为 “null” 的提示或警告:
x1c4d 1x指令集
但它不在那里。
1.我尝试搜索名为 “不必要” 的提示或警告:
但它不在那里。
1.我尝试搜索名为 “test” 的提示或警告:
指令集
但它不在那里。
如何关闭它
这就引出了我的问题:
- 假定NetBeans IDE 14无法关闭 “不必要的空值测试” 警告
- 如何关闭NetBeans IDE 14中的 “不必要的空值测试” 警告?
额外阅读
- What does unnecessary test for null mean?
- Netbeans tells me to remove null comparison, but that breaks my code(“首先要注意的是:NetBeans是错误的”)
- 错误Zilla:Bug 226923 - Wrong warning 'the expression is never null'
- 布格齐拉:Bug 262707 - Add configuration of Nullable/NonNull annotations. Use FQNs or allow to exclude FQNs.
2条答案
按热度按时间cl25kdpy1#
您可以使用Java注解
@SuppressWarnings("null")
关闭“Unnecessary test for null”警告。该注解位于java.lang中,不需要导入。The OpenJDK Javadoc for SuppressWarnings for JDK 17 states:
指示应在带注解的元素(以及带注解的元素中包含的所有程序元素)中禁止显示命名编译器警告...出于风格考虑,程序员应始终在嵌套最深的元素上使用此注解,因为它是有效的。如果要禁止显示特定方法中的警告,则应注解该方法,而不是其类。
从Java语言规范的www.example.com部分的链接文档中9.6.4.5可以看出,
@SuppressWarnings
似乎完全满足了您的需要,我在这里强调了一下:9.6.4.5. @抑制警告
Java编译器越来越能够发出有用的“类似棉绒的”警告。为了鼓励使用这样的警告,当程序员知道警告不合适时,应该有某种方法来禁用程序中某个部分的警告。
下面是基于OP中的示例代码:
下面是NetBeans 14中该代码的屏幕截图,其中显示:
doSomething()
中的第22行显示了不必要的警告“* 不必要的空值测试 *”。@SuppressWarnings("null")
防止在其他方面相同的方法doSomething2()
中第30行上显示不必要的警告“Unnecessary test for null”。aelbi1ox2#
答案是:这是做不到的。
NetBeans没有提供禁用不必要的空值测试警告的方法。
解决方法
正如其他人在其他回答中所指出的:
解决(不正确的)警告的正确方法是 * 混淆 * 空值检查。
而不是叫:
而是呼叫:
这是一回事;只是这样NetBeans就不会意识到您正在测试
null
的变量,因此也不会发出警告。