@Builder 无法继承父类的解决方法
假设父类BaseEntity中有createdBy、updatedBy字段,子类User中有name字段。那么在子类上加@Builder是不能为父类中的这两个字段设置值的。解决方案如下:
-
子类调用builder()方法时能为父类的createdBy字段设置值
-
cn.king.pojo.BaseEntity
package cn.king.pojo; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; @Data @NoArgsConstructor @AllArgsConstructor public class BaseEntity { private String createdBy; private String updatedBy; public BaseEntity(String createdBy) { this.createdBy = createdBy; } }
-
cn.king.pojo.User
package cn.king.pojo; import lombok.*; // 注意此处没有@Builder注解 @Data @EqualsAndHashCode(callSuper = true) @NoArgsConstructor @AllArgsConstructor public class User extends BaseEntity{ private String name; @Builder // 注意将@Builder注解加在此处,类上没有@Builder注解 public User(String name,String createdBy) { super(createdBy); this.name = name; } }
-
cn.king.test.Demo01
public class Demo01 { public static void main(String[] args) { User user = User.builder().name("tom").createdBy("anne").build(); System.out.println(JSON.toJSONString(user)); } }
-
-
子类调用builder()方法时能为父类的createdBy字段和updatedBy字段设置值
-
cn.king.pojo.BaseEntity
package cn.king.pojo; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; @Data @NoArgsConstructor @AllArgsConstructor public class BaseEntity { private String createdBy; private String updatedBy; }
-
cn.king.pojo.User
package cn.king.pojo; import lombok.*; // 注意此处没有@Builder注解 @Data @EqualsAndHashCode(callSuper = true) @NoArgsConstructor @AllArgsConstructor public class User extends BaseEntity { private String name; @Builder // 注意将@Builder注解加到此处,类上没有@Builder注解 public User(String name, String createdBy, String updatedBy) { super(createdBy, updatedBy); this.name = name; } }
-
cn.king.test.Demo01
public class Demo01 { public static void main(String[] args) { User user = User.builder().name("tom").createdBy("anne").build(); System.out.println(JSON.toJSONString(user)); User user1 = User.builder().name("mike").createdBy("zhangsan").updatedBy("lisi").build(); System.out.println(JSON.toJSONString(user1)); } }
-