项目链接
通过注解,在编译阶段生成相关方法和类。
作用类上,生成所有成员变量的getter/setter方法。
作用于成员变量上,生成该成员变量的getter/setter方法。
可以设定访问权限及是否懒加载等。
作用于类,覆盖默认的toString()方法。默认使用所有字段。
of属性限定显示某些字段。
exclude属性排除某些字段。
of的优先级高于exclude。
标识不能为空,否则抛出空指针异常。
作用于方法参数:
生成无参构造器。
生成全参构造器。
生成包含final和@NonNull注解的成员变量的构造器。
作用于类上,是以下注解的集合:@ToString @EqualsAndHashCode @Getter @Setter @RequiredArgsConstructor。
作用于类上,将类转变为建造者模式。
//编译后 public class Person { private String name; private final int age; private String email; private String address; private String password; Person(String name, int age, String email, String address, String password) { this.name = name; this.age = age; this.email = email; this.address = address; this.password = password; } public static PersonBuilder builder() { return new PersonBuilder(); } public static class PersonBuilder { private String name; private int age; private String email; private String address; private String password; public PersonBuilder name(String name) { this.name = name; return this; } public PersonBuilder age(int age) { this.age = age; return this; } public PersonBuilder email(String email) { this.email = email; return this; } public PersonBuilder address(String address) { this.address = address; return this; } public PersonBuilder password(String password) { this.password = password; return this; } public Person build() { return new Person(this.name, this.age, this.email, this.address, this.password); } public String toString() { return "Person.PersonBuilder(name=" + this.name + ", age=" + this.age + ", email=" + this.email + ", address=" + this.address + ", password=" + this.password + ")"; } } }@Builder修饰的类会生成全参构造器,如果父类和子类都用@Builder修饰,子类会报错:找不到父类的无参构造器。
解决办法:父类添加无参构造器注解@NoArgsConstructor。但是Lomhok底层@NoArgsConstructor和@Builder冲突,无法生成无参构造器。通过将@NoArgsConstructor,@AllArgsConstructor一起加上可解决冲突。
总结:@Builder修饰的类加上@NoArgsConstructor,@AllArgsConstructor注解。
有泛型修饰的类用@Builder修饰,无法在编译期生成相关代码,因此无法使用Lomhok的构建者模式。
目前没有有效的解决办法,使用传统的构建对象的方式实现。
自动添加日志属性。 private final Logger logger = LoggerFactory.getLogger();
方法的检查时异常在编译期要求显示抛出,@SneakyThrows把该方法可能抛出的检查时异常封装成运行时异常抛出。