前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >开发工具Tools·Lombok

开发工具Tools·Lombok

作者头像
数媒派
发布2022-12-01 11:35:40
8260
发布2022-12-01 11:35:40
举报
文章被收录于专栏:产品优化

Lombok

记录 Lombok 中常见的一些注解。

Builder

Java    构造模式:

代码语言:javascript
复制
@Data
public class User {
    private Integer id;
    private String name;
    private String address;

    private User() {
    }

    private User(User origin) {
        this.id = origin.id;
        this.name = origin.name;
        this.address = origin.address;
    }

    public static class Builder {
        private User target;

        public Builder() {
            this.target = new User();
        }

        public Builder id(Integer id) {
            target.id = id;
            return this;
        }

        public Builder name(String name) {
            target.name = name;
            return this;
        }

        public Builder address(String address) {
            target.address = address;
            return this;
        }

        public User build() {
            return new User(target);
        }
    }
}

使用方式:

代码语言:javascript
复制
User user = new User.Builder().id(1).name("Nicestar").address("chan").build();

使用 @Builder 注解可以很方便实现建造者模式:

代码语言:javascript
复制
@Data
@Builder
public class User {
    private Integer id;
    private String name;
    private String address;
}

使用方式:

代码语言:javascript
复制
User user = User.builder().id(1).name("Nicestar").address("chan").build();

如果属性字段有默认值,需要加上 @Builder.Default 注解:

代码语言:javascript
复制
@Builder.Default
private String name = "Nicestar1";

@AllArgsConstructor、@NoArgsConstructor、@RequiredArgsConstructor(staticName = “of”)

如果要给实体类生成构造方法:

  • @AllArgsConstructor 用来指定全参数构造器
  • @NoArgsConstructor 用来指定无参数构造器
  • @RequiredArgsConstructor 给所有带有 @NonNull 注解的或者带有 final 修饰的成员变量生成对应的构造方法,使用静态方法调用
代码语言:javascript
复制
@Data
@AllArgsConstructor
@NoArgsConstructor
@RequiredArgsConstructor(staticName = "of")
public class User {
    private Integer id;
    private String name;
    @NonNull private String address;
}

使用方式:

代码语言:javascript
复制
User user1 =new User(); // 无参构造器
User user2 =new User(1, "Nicestar", "chan"); // 全参构造器
User user3 = User.of("chan"); // `@NonNull` 和 `final` 参数构造器

使用 @RequiredArgsConstructor(onConstructor = @__(@Autowired)) 注解可以给所有 private final 字段提供自动注入。

@Accessors

使用 @Accessors(chain = true) 注解实现链式调用:

代码语言:javascript
复制
@Data
@Accessors(chain = true)
public class User {
    private Integer id;
    private String name;
    private String address;
}

使用方式:

代码语言:javascript
复制
User user = new User().setId(2).setName("Nicestar").setAddress("chan");

也可以配合上面的 @RequiredArgsConstructor 使用:

代码语言:javascript
复制
@Data
@Accessors(chain = true)
@RequiredArgsConstructor(staticName = "of")
public class User {
    private Integer id;
    private String name;
    @NonNull private String address;
}

使用方式:

代码语言:javascript
复制
User user = User.of("chan").setId(2).setName("Nicestar");

@Data

@Data 注解是 @ToString@EqualsAndHashCode@Getter@Setter@RequiredArgsConstructor 注解的集合。代替 RequiredArgsConstructor 使用时:

代码语言:javascript
复制
@Data
@Data(staticConstructor="of")
public class User {
    private Integer id;
    private String name;
    @NonNull private String address;
}

@NonNull

注解在属性上,会自动产生一个关于此参数的非空检查,如果参数为空,则抛出一个空指针异常。

@Cleanup

这个注解用在变量前面,可以保证此变量代表的资源会被自动关闭,默认是调用资源的 close() 方法,如果该资源有其它关闭方法,可使用 @Cleanup(“methodName”) 来指定要调用的方法,也会生成默认的构造方法

代码语言:javascript
复制
public static void main(String[] args) throws IOException {

    @Cleanup InputStream in = new FileInputStream(args[0]);
}

@ToString(callSuper = true)

解决子类 toString 方法不打印父类属性:

代码语言:javascript
复制
@ToString(callSuper = true)
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Lombok
    • Builder
      • @AllArgsConstructor、@NoArgsConstructor、@RequiredArgsConstructor(staticName = “of”)
        • @Accessors
          • @Data
            • @NonNull
              • @Cleanup
                • @ToString(callSuper = true)
                领券
                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档