返回目录
对于Java程序员来说,domain对象或者说Java类中的setter/getter绝对是令人厌弃的东西,而且这些格式化的代码还需要随着属性的修改不断维护。而lombok就是可以协助帮我们去掉这些东西的神器。
1. lombok介绍
官网:https://projectlombok.org/
优势 | 劣势 |
---|---|
1. 去掉setter/getter方法; 2. 去掉toString,hashcode等方法; 3. 可以自动生成有参、无参构造器等; | 1. 需要IDE安装插件进行支持; 2. maven/gradle等不同的工具依赖方式存在差别; |
2. lombok简单使用
2.1 Intellij IDEA插件安装
2.2 工程依赖
maven依赖
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.12</version>
<scope>provided</scope>
</dependency>
gradle依赖
dependencies {
compileOnly 'org.projectlombok:lombok:1.18.12'
annotationProcessor 'org.projectlombok:lombok:1.18.12'
testCompileOnly 'org.projectlombok:lombok:1.18.12'
testAnnotationProcessor 'org.projectlombok:lombok:1.18.12'
}
2.3 使用
源代码:
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
@Data
@EqualsAndHashCode(callSuper = false)
@NoArgsConstructor
public class Student {
private String eid;
private String name;
private int age;
private String clzNo;
}
反编译代码:
public class Student {
private String eid;
private String name;
private int age;
private String clzNo;
public String getEid() {
return this.eid;
}
public String getName() {
return this.name;
}
public int getAge() {
return this.age;
}
public String getClzNo() {
return this.clzNo;
}
public void setEid(String eid) {
this.eid = eid;
}
public void setName(String name) {
this.name = name;
}
public void setAge(int age) {
this.age = age;
}
public void setClzNo(String clzNo) {
this.clzNo = clzNo;
}
public String toString() {
return "Student(eid=" + this.getEid() + ", name=" + this.getName() + ", age=" + this.getAge() + ", clzNo=" + this.getClzNo() + ")";
}
public boolean equals(Object o) {
if (o == this) {
return true;
} else if (!(o instanceof Student)) {
return false;
} else {
Student other = (Student)o;
if (!other.canEqual(this)) {
return false;
} else {
Object this$eid = this.getEid();
Object other$eid = other.getEid();
if (this$eid == null) {
if (other$eid != null) {
return false;
}
} else if (!this$eid.equals(other$eid)) {
return false;
}
Object this$name = this.getName();
Object other$name = other.getName();
if (this$name == null) {
if (other$name != null) {
return false;
}
} else if (!this$name.equals(other$name)) {
return false;
}
if (this.getAge() != other.getAge()) {
return false;
} else {
Object this$clzNo = this.getClzNo();
Object other$clzNo = other.getClzNo();
if (this$clzNo == null) {
if (other$clzNo != null) {
return false;
}
} else if (!this$clzNo.equals(other$clzNo)) {
return false;
}
return true;
}
}
}
}
protected boolean canEqual(Object other) {
return other instanceof Student;
}
public int hashCode() {
int PRIME = true;
int result = 1;
Object $eid = this.getEid();
int result = result * 59 + ($eid == null ? 43 : $eid.hashCode());
Object $name = this.getName();
result = result * 59 + ($name == null ? 43 : $name.hashCode());
result = result * 59 + this.getAge();
Object $clzNo = this.getClzNo();
result = result * 59 + ($clzNo == null ? 43 : $clzNo.hashCode());
return result;
}
public Student() {
}
}
说明:
可以看到lombok已帮你自动生成setter/getter/hashCode/toString/equals/constructor方法,基本上以满足使用。
常用注解 | 说明 |
---|---|
@data | 相当于添加如下注解:@Getter @Setter @RequiredArgsConstructor @ToString @EqualsAndHashCode |
@EqualsAndHashCode | 生成equuals和hashcode方法 |
@NoArgsConstructor | 自动生成无参构造器 |
@AllArgsConstructor | 生成全部参数的注解,不建议使用,参数顺序无法指定 |
@Slf4j | 相当于添加: private static final org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(T.class); |
@Setter | 生成属性的setter方法 |
@Getter | 生成getter方法 |
部分参数在此抛砖引玉,其它参数详细说明可以参考官网:https://projectlombok.org/features/all