正如标题所说,拥有@Nullable和@Nonull可以帮助你的ide或linter在编译时捕获bug,但为什么它有运行时保留?
解决方法:
可以想象,运行时保留将允许AOP代理检测传递给@Nonnull-annotated参数的空参数,并抛出异常或以其他方式处理它.您可以争辩说,这是一种处理运行时空检查的更好方法,即在代码中使用显式空检查.
是的,这些注释对于静态编译检查非常有用,但是没有理由它们不能在运行时用于相同的目的.它们作为注释的有效性延伸到运行时域,不像用于代码生成之类的注释.