02.Lombok-
@NonNull 注解
看一个案例
package com.lzh;
import lombok.extern.slf4j.Slf4j;
/**
* @Author:kaiyang.cui
* @Package:com.lzh
* @Project:1024shop-manager
* @name:NonNullTest
* @Date:2023/3/29 下午5:05
* @Filename:NonNullTest
* @Description:判断login()方法传入参数
* @Version:1.0
*/
@Slf4j
public class NonNullTest {
public static void main(String[] args) {
String pwd = null;
login(pwd);
}
public static void login(String pwd) {
if (pwd == null) {
log.info("参数为空");
throw new NullPointerException("NPE异常,参数为空");
}
// TODO 业务逻辑
log.info("密码传入成功");
}
}
这是我以前写的代码,当一个参数传入进来,我们必须对传入的参数进行非空判断,否则会出现NPE异常。
我们再来看一个代码:
我们在login()方法的参数列表上写@NonNull注解
package com.lzh;
import lombok.NonNull;
import lombok.extern.slf4j.Slf4j;
/**
* @Author:kaiyang.cui
* @Package:com.lzh
* @Project:1024shop-manager
* @name:NonNullTest
* @Date:2023/3/29 下午5:05
* @Filename:NonNullTest
* @Description:@NonNull 注解,作用于方法或者属性,用于非空判断,如果为空则抛出异常!
* @Version:1.0
*/
@Slf4j
public class NonNullTest {
public static void main(String[] args) {
String pwd = null;
login(pwd);
}
public static void login(@NonNull String pwd) {
// TODO 业务逻辑
log.info("密码传入成功");
}
}
当我们对login()方法中的参数传入一个@NonNull注解时,我们会神器的在字节码文件中发现,@NonNull注解做了2件事情 :
- 添加一个无参构造方法
- 对login()方法传入的参数进行了非空校验
public static void login(@NonNull String pwd) {
if (pwd == null) {
throw new NullPointerException("pwd is marked non-null but is null");
} else {
log.info("密码传入成功");
}
}
@NoArgsConstructor 注解
在上一篇文章中,我写到如果在类中写@Setter或@Setter注解时会默认在类中显示的声明无参构造方法。
package com.lzh.model;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
/**
* @Author:kaiyang.cui
* @Package:com.lzh.model
* @Project:1024shop-manager
* @name:User
* @Date:2023/3/29 下午4:01
* @Filename:User
* @Description:User实体类
* @Version:1.0
*/
@Setter
@Getter
@NoArgsConstructor
public class User {
private Integer id;
private String username;
private String password;
private String email;
}
mvn compile 后
其实大家可以看出来,@NoArgsConstructor 注解就是帮助我们在类中显示的声明一个无参的构造方法!!!!
@AllArgsConstructor注解
@AllArgsConstructor注解可以帮助我们在实体类中生成全参的构造方法
package com.lzh.model;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
/**
* @Author:kaiyang.cui
* @Package:com.lzh.model
* @Project:1024shop-manager
* @name:User
* @Date:2023/3/29 下午4:01
* @Filename:User
* @Description:User实体类
* @Version:1.0
*/
@Setter
@Getter
@AllArgsConstructor
public class User {
private Integer id;
private String username;
private String password;
private String email;
}
@RequiredArgsConstructor 注解
- final 类型未被初始化的属性,标记了@NonNull属性,会帮助我们自动判断
- 注意:在使用@RequiredArgsConstructor 注解后,不能使用@NoAragsConstructor注解
package com.lzh.model;
import lombok.*;
/**
* @Author:kaiyang.cui
* @Package:com.lzh.model
* @Project:1024shop-manager
* @name:User
* @Date:2023/3/29 下午4:01
* @Filename:User
* @Description:User实体类
* @Version:1.0
*/
@Setter
@Getter
@AllArgsConstructor
@RequiredArgsConstructor
public class User {
private Integer id;
private String username;
private String password;
private String email;
@NonNull
private final String adress;
}
希望这篇文章对你有帮助,我们下期再见。