@Data
相当于同时使用了 @Getter 、@Setter 、@RequiredArgsConstructor、@ToString、@EqualsAndHashCode
1、如何使用
- 需要同时使用@Getter 、@Setter 、@RequiredArgsConstructor、@ToString、@EqualsAndHashCode注解一个Bean的时候。
2、代码示例
例:
java">@Data
public class People {private String name;private int age;private String sex;
}
@Builder
帮助我们简化 Builder 模式的实现过程
Builder模式(创建者模式):创建型设计模式,将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示,提供一种通过链式方法来创建一个复杂的对象。
1、如何使用
- 注解在类上,会生成一个名为builder的静态方法以及各属性的链式设置方法,最后通过 build 方法来构建对象。
- 在构造函数上使用 @Builder 注解,可以控制哪些字段需要在 builder 中出现。比如,我们可能有一个包含很多字段的类,但只希望部分字段可以通过 builder 来设置。
- 字段在 builder 模式中有默认值,我们可以在构造函数中设置。
2、代码示例
例:
java">@Builder
@ToString
public class People {private String name;private int age;private String sex;
}
那么创建对象时就可以通过builder静态方法实现
java">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");}
}
例:
java">@ToString
public class People {private String name;private int age;private String sex;@Builderpublic People(String name, int age, String sex) {this.name = name;this.age = age;this.sex = (sex==null)?"未知":sex;}
}
那么创建对象时就可以通过builder静态方法实现
java">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、代码示例
例:
java">@Value
public class People {private String name;private int age;private String sex;
}
编译后:
java">import lombok.Generated;public final class People {private final String name;private final int age;private final String sex;@Generatedpublic People(String name, int age, String sex) {this.name = name;this.age = age;this.sex = sex;}@Generatedpublic String getName() {return this.name;}@Generatedpublic int getAge() {return this.age;}@Generatedpublic String getSex() {return this.sex;}@Generatedpublic 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;}}}@Generatedpublic 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;}@Generatedpublic String toString() {return "People(name=" + this.getName() + ", age=" + this.getAge() + ", sex=" + this.getSex() + ")";}
}