使用project lombok 优雅代码

在我们平时的开发中创建JAVA对象(POJO),也就是JavaBean是再常见不过的工作了,一个普通的实体一般都会有对象的属性,以及属性对应的getter和setter方法,再加上构造函数、toString、hashCode、equals等等方法,简单的一个java对象,少则几十行,多着几百上千行。

代码冗长,阅读性相对较差(虽然习惯了也不怎么觉得)。

而lombok能很好的解决这个问题,消除代码的冗长。

进入正题,首先想要使用lombok进行编码,需要先安装lombok插件,如何安装可以看我上一篇博文

安装好之后,在项目中添加lombok jar包的依赖,以maven为例(我使用的是1.18.4的版本)

<dependency>
	    <groupId>org.projectlombok</groupId>
	    <artifactId>lombok</artifactId>
	    <version>1.18.4</version>
	    <scope>provided</scope>
</dependency>

添加完依赖之后就能进行编码了。

接下来我们来讲讲lombok常用annotation,以及效果。

@Data
是lombok中最常用的注释了,它集合了@ToString, @EqualsAndHashCode, @Getter和@Setter

注意点1: 同时使用@Data 和 @AllArgsConstructor 后 ,默认的无参构造函数失效,如果需要它,要重新设置 @NoArgsConstructor。

注意点2:当java对象有继承了父类方法的时候,需要同时使用@EqualsAndHashCode(callSuper=false),callSuper是指equals和hashCode是不是需要包含父类的属性,false为不包含父类属性

@Data
@EqualsAndHashCode(callSuper=false)
public class UserInfoVO extends BaseBO{
	
	//用户Id
	private Integer uId;
	//手机号
	private String mobilePhone;
	//用户名
	private String userName;
	//注册来源
	private String source;
	//注册Ip
	private String userIp;
	//注册时间
	private Date regTime;
	//姓名
	private String realName;
	//身份证号
	private String idCard;
	//省份编号
	private String province;
	//城市编号
	private String city;
	//区县编号
	private String region;
	//详细地址
	private String streetAddress;
	//邮编
	private String zipCode;
	
}

在这里插入图片描述

@Getter和@Setter

注释分别为属性生成getter和setter,注释类的话会生成所有属性的getter和setter方法。

//用户Id
	@Getter@Setter
	private Integer uId;
	//手机号
	@Getter@Setter
	private String mobilePhone;

相当于

//用户Id
	private Integer uId;
	//手机号
	private String mobilePhone;
	
	public Integer getuId() {
		return uId;
	}
	public void setuId(Integer uId) {
		this.uId = uId;
	}
	public String getMobilePhone() {
		return mobilePhone;
	}
	public void setMobilePhone(String mobilePhone) {
		this.mobilePhone = mobilePhone;
	}

@ToString@EqualsAndHashCode

@ToString生成toString方法,@EqualsAndHashCode生成equals方法和hashCode方法。

@NonNull
判断是否为空,如果为空,则抛出java.lang.NullPointerException

@Cleanup
这个注释可用于确保释放分配的资源,当局部变量被注释为@Cleanup,任何后续代码都包装在try/finally块,该块确保在当前作用域结束时调用清理方法。

@Cleanup 
InputStream in = new FileInputStream(args[0]);
@Cleanup 
OutputStream out = new FileOutputStream(args[1]);

这个我平时用到的并不多,很少有在实体中使用输入输出流。

@Synchronized@SneakyThrow

这两个同样很少用到,需要用到的可以去深入研究一下。

猜你喜欢

转载自blog.csdn.net/zhoukun1314/article/details/84401556
今日推荐