使用@NonNull注解遇到的小问题及解决

2023-01-06 15:07:25

目录使用@NonNull注解遇到问题先简单介绍一下NotNull和NonNull的差异下面进入主题Lombok@NonNull注解总结使用@NonNull注解遇到问题先简单介绍一下NotNull和N...

目录
使用@NonNull注解遇到问题
先简单介绍一下NotNull和NonNull的差异
下面进入主题
Lombok @NonNull注解
总结

使用@NonNull注解遇到问题

先简单介绍一下NotNull和NonNull的差异

@NotNuWJvehll 是 jsR303(Bean的校验框架)的注解,用于运行时检查一个属性是否为空,如果为空则不合法。
@NonNull 是JSR 305(缺陷检查框架)的注解,是告诉编译器这个域不可能为空,当代码检查有空值时会给出一个风险警告,目  前这个注解只有IDEA支持。

下面进入主题

我在使用@NonNull时遇到的小bug:

@NonNull注解的对象  在其形成无参构造函数时,此注解不会默认形成无参构造器(问题就出在这儿)

 例:

 (1)Param编程eterVO.Java中加了NonNull注解

@Data
public class ParameterVO implements Serializable{
  @NonNull
  private String saasId;
}

编译后的class文件中(不会生成无参构造函数):

public class ParameterVO implements Serializable{
  @NonNull
  private String saasId;
 
  @NonNull 
  public String getSaasId() { 
   return this.saasId; 
}  
  .......
}

(2) ParameterVO.java中倘若没有加上@NonNull注解

@Data
public class test implements Serializable{ 
  private String saasId;
}

对应所编译后的class文件(可以自动生成无参构造函数):

public class test implements Serializable{ 
  private String saasId; 

  public test(){} 
  .......
}

 (3)解决方法: 此类情况,在ParameterVO.java中加一个注解@NoArgsConstructor

@Data
@NoArgsConstructor
public class ParameterVO implements Serializable{ 
  @NonNull 
  private String saasId;
}

这样的话,就可以解决掉因为注解@NonNull导致的没有生成无参构造函数的问题!

Lombok @NonNull注解

普通的 POJO 需要写或是用IDEA等集成开发环境生成大量gettter, setter方法

普通的 POJO 对于 equals 和 hashCode 等方法,也需要自己维护。特别你写接口的时候,如果添加了 一个字段忘了维编程护,可能会导致一些bug

为此Lombok诞生了 它可以简化你的代码,让你的POJO看起来更加地清爽(可以只有类名和字段的声明,加上少量的注解)

@NonNull注解用来判断项目中的字段是否为空,为空抛出异常

public class NonNullAnnotation {

  @NonNull
  @Setter
  @Getter
  private List<Student> members;
  public static void main(String[] args) {
    NonNullAnnotation test = new NonNullAnnotation();
    test.setMembers(null);
    //test.getMembers();
  }
}

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。