Java不允许您使用其类型系统来表示null安全性,但是Spring Framework现在在org.springframework.lang
包中提供了以下注释,以允许您声明API和字段的为空性:
@Nullable
:表示特定参数,返回值或字段可以为的注释null
。@NonNull
:表示不能指定特定参数,返回值或字段的注释null
(分别不需要在参数/返回值和字段@NonNullApi
以及@NonNullFields
应用的字段上)。@NonNullApi
:程序包级别的注释,它声明非null作为参数和返回值的默认语义。@NonNullFields
:程序包级别的注释,它声明非null作为字段的默认语义。
Spring Framework 本身利用了上面这几个注释,但它们也可以运用在任何基于Spring的Java 项目中,以声明空安全api 和 空安全字段。尚未支持泛型和数组元素的可空性,但应也即将发布在后来的版本。Spring Null-Safety出现在Spring5中,让我们更方便的编写空安全的代码,这叫做null-safety。null-safety不是让我们逃脱不安全的代码,而是在编译时产生警告。此类警告可以在运行时防止灾难性空指针异常(NPE)。
那么空安全是个啥玩意呢?
@NonNull注释是null-safety的所有注释中最重要的一个,我们可以使用此注释在期望对象引用的任何地方声明非空约束:字段、方法参数或者方法返回值。
Spring 的null-safety特性能够允许idea或者eclipse报告这个潜在的威胁,也就是说结合ide的配置,在开发时警告提醒。
@NonNull 注解能够帮助你确保null-safety。然而,如果此注释直接装饰所有的字段的话,就会污染整个代码库。
Spring提供了另外一个不允许为null的注解 — @NonNullFields。这个注解适合用在包级别上,通知我们的开发工具注释包中所有的字段,默认的,不允许为null
@NonNullFields注释通常比@NonNull更好,因为它有助于减少样板。但是,有时我们想要从包级别指定的非null约束中免除某些字段,这时候就会使用到@Nullable注解。
@NonNullFields注释仅适用于其名称所示的字段。如果我们想对方法的参数和返回值产生相同的影响,我们需要@NonNullApi。
好吧,没啥意思,暂不细研究。
END