57

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

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 不应该在运行时检查。

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

PS我从带有Oracle JDK 1.8.0_102的IntelliJ IDEA 2016.3以调试模式运行Tomcat服务器

4

1 回答 1

85

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

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

截图

于 2016-11-28T15:25:50.803 回答