在上述示例中,@Builder
注解应用在 Person 类上,通过链式调用的方式创建 Person 对象。使用 builder() 方法返回一个生成器对象,然后可以通过链式调用的方式设置对象的属性。最后使用 build() 方法构建最终的对象。
使用 @Builder
注解可以避免手动编写繁琐的构造函数和设置属性的方法,提供了一种更简洁的方式来创建对象,并且可以设置默认值、可选属性等。
@Getter
@Setter
@Builder
public class Person {
private String name;
private int age;
private String address;
public static void main(String[] args) {
Person person = Person.builder()
.name("John")
.age(25)
.address("123 Main St")
.build();
System.out.println(person.getName()); // 输出: John
System.out.println(person.getAge()); // 输出: 25
System.out.println(person.getAddress()); // 输出: 123 Main St
}
}
在上述示例中,@Builder
注解应用在 Person 类上,通过链式调用的方式创建 Person 对象。使用 builder() 方法返回一个生成器对象,然后可以通过链式调用的方式设置对象的属性。最后使用 build() 方法构建最终的对象。
使用 @Builder
注解可以避免手动编写繁琐的构造函数和设置属性的方法,提供了一种更简洁的方式来创建对象,并且可以设置默认值、可选属性等。
上方@Builder展开后大致为
public class User {
private String name;
private int age;
private String address;
// 构造方法私有化,不然客户端可以直接调用构造方法了
private User(String name, int age, String address) {
this.name = name;
this.age = age;
this.address = address;
}
// 静态方法,用于生成一个 Builder
public static UserBuilder builder(){
return new UserBuilder();
}
// 建造者类(静态内部类):保持参数和外部类一致
public static class UserBuilder{
private String name;
private int age;
private String address;
private UserBuilder(){
}
public UserBuilder name(String name){
this.name = name;
return this;
}
public UserBuilder age(int age){
this.age = age;
return this;
}
public UserBuilder address(String address){
this.address = address;
return this;
}
public User build(){
// 可以在其中做些校验
if (name == null || address == null) {
throw new RuntimeException("名称和地址不能为空");
}
if (age < 0 || age >= 130) {
throw new RuntimeException("年龄不合法");
}
return new User(name, age, address);
}
}
public static void main(String[] args) {
User user = User.builder()
.name("Ricard")
.age(18)
.address("chengdu")
.build();
System.out.println(user.name);
}
}