@Data
相当于同时使用了 @Getter 、@Setter 、@RequiredArgsConstructor、@ToString、@EqualsAndHashCode
1、如何使用
- 需要同时使用@Getter 、@Setter 、@RequiredArgsConstructor、@ToString、@EqualsAndHashCode注解一个Bean的时候。
2、代码示例
例:
@Data
public class People {
private String name;
private int age;
private String sex;
}
@Builder
帮助我们简化 Builder 模式的实现过程
Builder模式(创建者模式):创建型设计模式,将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示,提供一种通过链式方法来创建一个复杂的对象。
1、如何使用
- 注解在类上,会生成一个名为builder的静态方法以及各属性的链式设置方法,最后通过 build 方法来构建对象。
- 在构造函数上使用 @Builder 注解,可以控制哪些字段需要在 builder 中出现。比如,我们可能有一个包含很多字段的类,但只希望部分字段可以通过 builder 来设置。
- 字段在 builder 模式中有默认值,我们可以在构造函数中设置。
2、代码示例
例:
@Builder
@ToString
public class People {
private String name;
private int age;
private String sex;
}
那么创建对象时就可以通过builder静态方法实现
public class Test {
public static void main(String[] args) {
People p = People.builder()
.name("tom")
.age(18)
.sex("男")
.build();
System.out.printf(p.toString() + "\n");
}
}
例:
@ToString
public class People {
private String name;
private int age;
private String sex;
@Builder
public People(String name, int age, String sex) {
this.name = name;
this.age = age;
this.sex = (sex==null)?"未知":sex;
}
}
那么创建对象时就可以通过builder静态方法实现
public class Test {
public static void main(String[] args) {
People p = People.builder()
.name("tom")
.age(18)
.build();
System.out.printf(p.toString() + "\n");
}
}
当不设置sex的值时,可以通过默认值取到“未知”。
@Value
创建不可变类
不可变类的特点是它的状态在对象创建后不能被修改,这在多线程环境中尤其有用。
1、如何使用
- 需要创建不可变类的时候,在类上添加该注解。
- @Value 注解是 @Data 的不可变版本,自动生成所有字段的 getter 方法、toString 方法、equals 和 hashCode 方法,以及一个全参数的构造函数,并将所有字段设为 private 和 final。
2、代码示例
例:
@Value
public class People {
private String name;
private int age;
private String sex;
}
编译后:
import lombok.Generated;
public final class People {
private final String name;
private final int age;
private final String sex;
@Generated
public People(String name, int age, String sex) {
this.name = name;
this.age = age;
this.sex = sex;
}
@Generated
public String getName() {
return this.name;
}
@Generated
public int getAge() {
return this.age;
}
@Generated
public String getSex() {
return this.sex;
}
@Generated
public boolean equals(Object o) {
if (o == this) {
return true;
} else if (!(o instanceof People)) {
return false;
} else {
People other = (People)o;
if (this.getAge() != other.getAge()) {
return false;
} else {
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$sex = this.getSex();
Object other$sex = other.getSex();
if (this$sex == null) {
if (other$sex != null) {
return false;
}
} else if (!this$sex.equals(other$sex)) {
return false;
}
return true;
}
}
}
@Generated
public int hashCode() {
int PRIME = true;
int result = 1;
int result = result * 59 + this.getAge();
Object $name = this.getName();
result = result * 59 + ($name == null ? 43 : $name.hashCode());
Object $sex = this.getSex();
result = result * 59 + ($sex == null ? 43 : $sex.hashCode());
return result;
}
@Generated
public String toString() {
return "People(name=" + this.getName() + ", age=" + this.getAge() + ", sex=" + this.getSex() + ")";
}
}