gpt4 book ai didi

java - NonNull 注释有什么意义?

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:15:19 30 4
gpt4 key购买 nike

我不明白 NonNull 注释应该如何提供帮助。所以,假设我有这个:

void noNullArg(@NonNull Object o)
{
// stuff
}

如果我这样做,我会收到一条关于“o”可能为空的警告。

void foo()
{
Object o = null;
noNullArg(o);
}

但如果我改为这样做,我根本不会收到任何警告。

void sendNull()
{
// Pass null and violate the annotation
foo(null);
}

void foo(Object o)
{
noNullArg(o);
}

这是一个未检测到的非常微不足道的案例。最重要的是,编译器似乎认为如果设置了 @NonNull 则检查 null 是不必要的,而实际上它显然不是(它表示条件始终为 false)。

最佳答案

如您所知,空指针异常 是 Java 中非常常见的失败案例。编译时将代码视为第二种情况,它会显示警告。

由于固有的复杂性,流分析最好以小块的形式进行。一次分析一个方法会有很好的性能,这个优点是分析速度很快,编译器可以在你键入时警告你。但不利的一面是分析看不到方法之间运行的值(作为参数或返回) .这就是第三种情况下它不会显示任何警告的原因。正如 EJP 所说,它将检查运行时。

@NonNull 表示 null 不是合法值。

这里空注释变得很重要。通过定义@NonNull 批注,您可以告诉编译器您不希望位置出现空值。

但是调用者有责任永远不传递 null 值,这是要确保的,例如,通过显式 null 检查。

关于java - NonNull 注释有什么意义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34170816/

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