IntelliJ IDEA中@NotNull注解自动显示的原理是什么?
问题解答
注解来自IntelliJ IDEA的推断式注解
这些@NotNull和@Contract注解并不是真的存在于你的代码或依赖里,也不是注解处理器自动生成的,完全是IDEA通过静态代码分析推断出来的虚拟注解:
@NotNull的推断逻辑:IDEA检测到foo方法里直接调用了value.length(),一旦参数为null必然触发空指针异常,所以它判断这个参数不应该传入null,自动给参数加上虚拟的@NotNull注解,用来提示你这个潜在风险。@Contract(pure = true)的推断逻辑:IDEA发现foo方法的返回值只由输入参数决定,既不会修改外部状态,也没有其他副作用,所以推断这是一个纯函数,用@Contract(pure = true)标记这个特性。
为什么没法跳转查看注解来源?
因为这些注解是IDEA在内存里动态生成的虚拟标记,根本没有实际的注解类文件对应,也没写入你的源代码,自然没法通过跳转功能定位到来源。
额外说明
这种智能推断是IDEA代码分析功能的默认特性,和项目有没有构建脚本、依赖库没关系——哪怕是单个手写的Java文件,IDEA也会做这类分析。你可以在IDEA的设置里调整这类警告的开关,但默认是开启状态的。
内容的提问来源于stack exchange,提问作者Martin Geisse
相关产品推荐
相关产品推荐

