Spring 中的Null-Safety (2)

@NonNullFields注释通常比@NonNull更好,因为它有助于减少样板。 但是,有时我们想要从包级别指定的非null约束中免除某些字段,这时候就会使用到@Nullable注解

改造一下Person.java,Person.java 与pack-info.java 处于同一包下

public class Person { @NonNull private String fullName; @Nullable private String nickName; public String getNickName() { return nickName; } public void setNickName(String nickName) { if(nickName != null && nickName.isEmpty()){ nickName = null; } this.nickName = nickName; } public String getFullName() { return fullName; } public void setFullName(String fullName) { if(fullName != null && fullName.isEmpty()){ fullName = null; } this.fullName = fullName; } }

在这种情况下,我们使用@Nullable注释来覆盖字段上@NonNullFields的语义。

@NonNullApi

@NonNullFields注释仅适用于其名称所示的字段。 如果我们想对方法的参数和返回值产生相同的影响,我们需要@NonNullApi。

添加 @NonNullApi和 @NonNullFields 在 configure annotations 中,并选用NonNullApi

Spring 中的Null-Safety

与@NonNullFields一样,我们需要在package-info.java 中定义@NonNullApi

package-info.java

@NonNullApi @NonNullFields package com.nullsafety.demo.pojo; import org.springframework.lang.NonNullApi; import org.springframework.lang.NonNullFields;

加上如下注释后的效果如下: 可以在返回值的时候接受到编译期的提示。

Spring 中的Null-Safety

后记

看完文章,你至少应该了解

四个注解 @NonNull, @Nullable, @NonNullFields, @NonNullApi 四个注解各自的作用范围

如何设置编译期的Null-safety检查

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpdxzd.html