前一段时间跟老师了一个项目,还算是有所大开眼界,当时发现了一个叫做@DATA的注解,竟然使用不需要写getter、setter方法,很是方便。后来查阅资料才知道是Lombok的注解。
当然能够偷懒的东西自然有利有弊
Lombok
是一个Java库,能够自动插入编辑器并自动构建工具,简化Java开发。通过使用注解的方式,不需要给类编写getter和eques方法,并且能够自动化日历变量。
使用
开发环境要Maven+Java+idea或者eclipse(安装Lombok插件)
插件的话可以去官网上下载
官网,可能下载慢
使用maven依赖
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.4</version>
<scope>provided</scope>
</dependency>
idea里安装插件
Setting->Plugins->搜索lombok即可
上面的设置可以选择离线下载,配置完成重启idea即可。
路径如下:
https://github.com/mplushnikov/lombok-intellij-plugin/releases
选择对应的idea版本进行下载,否则会报版本不一致的错误
Plugin incompatible with the new build found: Lombok
Lombok的常用注解
- @Setter:对应生成setter方法
- @Getter:对应生成getter方法
- @NoArgsConstructor:对应生成无参构造器方法
- @AllArgsConstructor:对应生成有参构造器方法
- @ToString:对应生成toSting方法
- @Slf4j:在需要打印日志的类中使用,当项目中使用了slf4j打印日志框架时使用该注解,会简化日志的打印流程,只需调用info方法即可
- @Log4j:在需要打印日志的类中使用,当项目中使用了log4j打印日志框架时使用该注解,会简化日志的打印流程,只需调用info方法即可;
- @EqualsAndHashCode:
- @DATA:在JavaBean中使用,这个注解包含范围最广,它包含getter、setter注解,即当使用当前注解时,会自动生成包含的所有方法;
以上全部使用在JavaBean中
推荐写法
@Data
@Builder(toBuilder = true)
@NoArgsConstructor
@AllArgsConstructor(access = AccessLevel.PRIVATE)
public class UserInfo {
private String name;
@Builder.Default
private String email = "bgood@sina.com";
}
示例:
创建一个评论信息类四个字段比较区别
明显还是区别很大
- 使用注解
@Data
public class News implements Serializable {
private Integer id;
private String name;
private String content;
private Date addTime;
}
- 不使用注解
import java.io.Serializable;
import java.util.Date;
public class News implements Serializable {
private Integer id;
private String name;
private String content;
private Date addTime;
public News(Integer id, String name, String content, Date addTime) {
this.id = id;
this.name = name;
this.content = content;
this.addTime = addTime;
}
public News() {
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
public Date getAddTime() {
return addTime;
}
public void setAddTime(Date addTime) {
this.addTime = addTime;
}
@Override
public String toString() {
return "News{" +
"id=" + id +
", name='" + name + '\'' +
", content='" + content + '\'' +
", addTime=" + addTime +
'}';
}
}
Lombok的优缺点
优点:
- 能通过注解的形式自动生成构造器、getter/setter、equals、hashcode、toString等方法,提高了一定的开发效率。
- 让代码变得简洁,不用过多的去关注相应的方法属性做修改时,也简化了维护为这些属性所生成的getter/setter方法等。
缺点:
- 不支持多种参数构造器的重载。
- 虽然省去了手动创建getter/setter方法的麻烦,但大大降低了源代码的可读性和完整性,降低了阅读源代码的舒适度,不适合新手使用。
- JDK版本问题:当版本不止一直的话,就不能正常使用。
- 绑定使用:当你使用别人的代码时,如果别人使用lombok。你也必须下载安装插件使用。
- 使用Lombok,一时觉得很爽,但它却污染了你的代码,破坏了Java代码的完整性,可读性和安全性。
- 代码耦合度增加。