为什么@Nonnull注释在运行时进行检查?

2022-08-31 17:00:06

我有一个具有以下签名的函数

public static String myFunction(@Nonnull String param)

当我用param作为null调用它时,我得到以下异常:

Caused by: java.lang.IllegalArgumentException: Argument for @Nonnull parameter 'param' of com/MyClass.myFunction must not be null
    at com.MyClass.$$$reportNull$$$0(MyClass.java) 

javax.annotation.Nonnull 不应该在运行时被检查。

谁实际上抛出了异常,为什么?

附言:我从 IntelliJ IDEA 2016.3 与 Oracle JDK 1.8.0_102 以调试模式运行 Tomcat 服务器


答案 1

在 IntelliJ IDEA 中编译项目时,它会检测已编译类的字节码,以便为各种类型的注释添加运行时检查。此行为由以下选项控制:@Nonnull

设置|构建、执行、部署|编译器|[x] 为非空注释的方法和参数添加运行时断言。

Screenshot of "Add runtime assertions for notnull-annotated methods and parameters.


答案 2

推荐