当前位置:   article > 正文

@Builder使用_@builder用法

@builder用法

简述:Builder 使用创建者模式又叫建造者模式。简单来说,就是一步步创建一个对象,它对用户屏蔽了里面构建的细节,但却可以精细地控制对象的构造过程。
使用:一般单独进行使用,如果需要和@Data一起使用,为避免造成不必要错误。推荐下面四个注解一起使用。

  1. @Builder
  2. @Data
  3. @AllArgsConstructor
  4. @NoArgsConstructor

简单使用:

注意:对于目标类中的所有的属性和未初始化的final字段,才会在构建器中创建对应属性。(所以下面没有.code()赋值)

  1. @Builder
  2. @Data
  3. @AllArgsConstructor
  4. @NoArgsConstructor
  5. public class User {
  6. private final Integer code = 200;
  7. private String username;
  8. private String password;
  9. }
System.out.println(User.builder().username("hecc").password("hecc").build());

泛型使用:

  1. @Builder
  2. @Data
  3. @AllArgsConstructor
  4. @NoArgsConstructor
  5. public class User<T> {
  6. private final Integer code = 200;
  7. private String username;
  8. private String password;
  9. private List<T> roles;
  10. }
System.out.println(User.<String>builder().username("hecc").password("hecc").role(Lists.newArrayList("admin")).build());

@Builder中使用 @Singular 注释集合

  1. @Builder
  2. @Data
  3. @AllArgsConstructor
  4. @NoArgsConstructor
  5. public class User {
  6. private final Integer code = 200;
  7. private String username;
  8. private String password;
  9. @Singular
  10. private List<String> roles;
  11. }
  1. //不添加
  2. System.out.println(User.builder().username("hecc").password("hecc").build());
  3. //单个添加
  4. System.out.println(User.builder().username("hecc").password("hecc").role("admin").build());
  5. //多次单个添加
  6. System.out.println(User.builder().username("hecc").password("hecc").role("admin").role("read").build());
  7. //一次性添加多个
  8. System.out.println(User.builder().username("hecc").password("hecc").roles(Lists.newArrayList("admin","read")).build());
  9. //搭配使用
  10. System.out.println(User.builder().username("hecc").password("hecc").role("test").roles(Lists.newArrayList("admin","read")).build());
  11. //还有个clearRoles()可以清空List集合里面的数值。


注意:
@Singular注解添加的额外方法使用的是集合名的单数形式。
例如:childrenInfos会生成childrenInfo;glasses会生成glass;children会生成child。
有时候属性名不规范或者无法识别时,@Singular就不知道生成啥样的,这个时候编译就报错,提示你:

Cant singularize this name: “ssss”; please specify the singular explicitly (i.e. @Singular(“sheep”))

解决办法:
1.规范命名,采用复数,比如roles。
2.@Singular(value="XXX"),给单个添加取个别名,这样你取的XXX就是单个添加的,被注解修饰的就是集合形式添加的。
 

@Singular注解的value属性,可以更改调用的方法名,如:

  1. @Singular(value = "test")
  2. private List<String> roles;

这样就是用.test("admin")赋值了,但是注意:添加一个集合的方法名没有发生改变,还是.roles(List集合)

        System.out.println(User.builder().username("hecc").password("hecc").test("admin").roles(Lists.newArrayList("test")).build());

@Builder.Default 的使用

在类中我在id和insertTime上都添加注解@Builder.Default,当我在使用这个实体对象时,我就不需要在为这两个字段进行初始化值。如果赋值,就会覆盖原有的赋值。

  1. @Builder
  2. @Data
  3. @AllArgsConstructor
  4. @NoArgsConstructor
  5. public class User {
  6. private final Integer code = 200;
  7. private String username;
  8. private String password;
  9. @Singular(value = "test")
  10. private List<String> roles;
  11. @Builder.Default
  12. private String id = UUID.randomUUID().toString();
  13. @Builder.Default
  14. private long insertTime = System.currentTimeMillis();
  15. }
  1. System.out.println(User.builder().username("hecc").password("hecc").test("admin").build());
  2. System.out.println(User.builder().username("hecc").password("hecc").test("admin").id("admin").insertTime(123).build());

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/333545
推荐阅读
相关标签
  

闽ICP备14008679号