简介
Lombok项目是一个Java库,它会自动插入编辑器和构建工具中,Lombok提供了一组有用的注释,用来消除Java类中的大量样板代码。仅五个字符(@Data)就可以替换数百行代码从而产生干净,简洁且易于维护的Java类。
常用注解
“Boilerplate”是一个术语,用于描述在应用程序的许多部分中很少改动就重复的代码。对Java语言最常见的批评就是在大多数项目中都可以找到这种类型的代码,由于语言本身的局限性而更加严重。龙目岛计划(Project Lombok)旨在通过用简单的注释集代替众多的代码。
Lombok也存在一定风险,在一些开发工具商店中没有Project Lombok支持选择。 IDE和JDK升级存在破裂的风险,并且围绕项目的目标和实施存在争议。
常用注解:
- @Setter :注解在类或字段,注解在类时为所有字段生成setter方法,注解在字段上时只为该字段生成setter方法。
- @Getter :使用方法同上,区别在于生成的是getter方法。
- @ToString :注解在类,添加toString方法。
- @EqualsAndHashCode: 注解在类,生成hashCode和equals方法。
- @NoArgsConstructor: 注解在类,生成无参的构造方法。
- @RequiredArgsConstructor: 注解在类,为类中需要特殊处理的字段生成构造方法,比如final和被@NonNull注解的字段。
- @AllArgsConstructor: 注解在类,生成包含类中所有字段的构造方法。
- @Data: 注解在类,生成setter/getter、equals、canEqual、hashCode、toString方法,如为final属性,则不会为该属性生成setter方法。
- @Slf4j: 注解在类,生成log变量,严格意义来说是常量。
案例
package com.lm.ad.domain;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import java.io.Serializable;
@Data
@AllArgsConstructor
@NoArgsConstructor
@EqualsAndHashCode
public class User implements Serializable {
private Integer id;
private String name;
private String pass;
private String introduction;
public User(String name, String pass, String introduction) {
this.name = name;
this.pass = pass;
this.introduction = introduction;
}
}
编译后结果:
package com.lm.ad.domain;
import java.io.Serializable;
public class User implements Serializable {
private Integer id;
private String name;
private String pass;
private String introduction;
public User(String name, String pass, String introduction) {
this.name = name;
this.pass = pass;
this.introduction = introduction;
}
public Integer getId() {
return this.id;
}
public String getName() {
return this.name;
}
public String getPass() {
return this.pass;
}
public String getIntroduction() {
return this.introduction;
}
public void setId(final Integer id) {
this.id = id;
}
public void setName(final String name) {
this.name = name;
}
public void setPass(final String pass) {
this.pass = pass;
}
public void setIntroduction(final String introduction) {
this.introduction = introduction;
}
public String toString() {
Integer var10000 = this.getId();
return "User(id=" + var10000 + ", name=" + this.getName() + ", pass=" + this.getPass() + ", introduction=" + this.getIntroduction() + ")";
}
public User(final Integer id, final String name, final String pass, final String introduction) {
this.id = id;
this.name = name;
this.pass = pass;
this.introduction = introduction;
}
public User() {
}
public boolean equals(final Object o) {
if (o == this) {
return true;
} else if (!(o instanceof User)) {
return false;
} else {
User other = (User)o;
if (!other.canEqual(this)) {
return false;
} else {
label59: {
Object this$id = this.getId();
Object other$id = other.getId();
if (this$id == null) {
if (other$id == null) {
break label59;
}
} else if (this$id.equals(other$id)) {
break label59;
}
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;
}
Object this$pass = this.getPass();
Object other$pass = other.getPass();
if (this$pass == null) {
if (other$pass != null) {
return false;
}
} else if (!this$pass.equals(other$pass)) {
return false;
}
Object this$introduction = this.getIntroduction();
Object other$introduction = other.getIntroduction();
if (this$introduction == null) {
if (other$introduction != null) {
return false;
}
} else if (!this$introduction.equals(other$introduction)) {
return false;
}
return true;
}
}
}
protected boolean canEqual(final Object other) {
return other instanceof User;
}
public int hashCode() {
int PRIME = true;
int result = 1;
Object $id = this.getId();
int result = result * 59 + ($id == null ? 43 : $id.hashCode());
Object $name = this.getName();
result = result * 59 + ($name == null ? 43 : $name.hashCode());
Object $pass = this.getPass();
result = result * 59 + ($pass == null ? 43 : $pass.hashCode());
Object $introduction = this.getIntroduction();
result = result * 59 + ($introduction == null ? 43 : $introduction.hashCode());
return result;
}
}