两者是互补的:
@Nonnull注解记录了
obj必须为非空的事实,而
Objects.requireNonNull调用则确保
obj运行时该值不为空。
您应该将两者结合起来,如下所示:
public Integer getId(@Nonnull SomeObject obj){ Objects.requireNonNull(SomeObject, "SomeObject is null"); // do some stuff return id;}有关的文档
@Nonnull可以在这里找到:
可选的类型注释不能替代运行时验证
在类型注释之前,用于描述可为空性或范围之类的内容的主要位置位于javadoc中。通过类型注释,此通信以一种编译时验证的方式进入字节码。
您的代码仍应执行运行时验证。



