美文网首页diboot
Lombok常用注解的使用总结

Lombok常用注解的使用总结

作者: 一个鸡蛋壳儿 | 来源:发表于2019-06-14 13:44 被阅读0次

Lombok是什么?

一个在编译阶段修改增强Java类的工具,使用方式基于注解,常用于:

  • 为Java POJO生成属性对应的getter,setter等
  • 为Java POJO生成builder构造器模式的实现
  • 为Java类自动添加其他重复性代码,比如日志记录的声明代码可以通过@Slf4j注解添加

项目中是否引入Lombok一直是个存在争议,它的主要优势在于消除Java类的部分臃肿代码,提高开发效率,降低代码维护成本;缺点是需要IDE插件支持,需要团队统一规范,另外某些注解生成的隐性实现可能导致问题跟踪调试困难。

不使用Lombok,IDE也可以自动生成getter,setter代码,但Lombok除了getter,setter还有@Builder和@SuperBuilder等非常实用的自动实现。比如你可以将一个POJO类转化为builder模式,如果你又有一个子类,子类的构造器还要继承自父类,写起来就费劲了。而通过Lombok只需要一个@SuperBuilder注解(v1.18.2+版本支持)。

如何引入Lombok

  • 引入依赖,以gradle为例:
compile("org.projectlombok:lombok:1.18.4")
  • IDE中安装插件,以IDEA为例: Settings -> Plugins -> 搜索Lombok Plugin,点击安装
image.png
  • IDEA中配置启用注解的处理: Enable annotation processing (不开启将导致编译错误)
image.png

Lombok常见用法

  • 在属性上添加的注解: @Getter、@Setter、@NonNull等:

示例代码:

public class Parent {
    // get,set添加在指定属性上
    @Getter @Setter private int id;
    @Getter @Setter private String name;
}
  • 在类上添加的注解:

    - @Data 注解组合,含@Setter、@Getter、@RequiredArgsConstructor、@EqualsAndHashCode等注解
    - 构造函数注解: @NoArgsConstructor、@AllArgsConstructor、@RequiredArgsConstructor
    - 构造器builder注解: @Builder、@SuperBuilder
    - 日志声明的注解: @Slf4j 等
    

示例代码:

@Data
public class Child extends Parent {
    private String ext;
}

@Setter@Getter或@Data注解添加后可以通过new创建对象并调用getter,setter方法:

Child c1 = new Child();
c1.setId(1);  
System.out.println(c1.getId());

Builder构造器模式与继承

构造模式的链式调用写起来很方便,自己实现构造模式要在POJO类中写较多代码,尤其是需要继承父类的builder时。
Lombok的@Builder注解可以方便的支持构造模式
示例代码:

@Builder
public class Child extends Parent {
    private String ext;
}

调用方法:

Child c1 = Child.builder().ext("子类属性ext").build();
System.out.println(c1.getExt());

此例中的链式调用仅有ext()属性,即使给父类Parent也添加@Builder注解也依然不能链式调用id()和name(),自己去写builder的实现也是这样,类是继承的,但类中的builder并无继承关系,而实际开发场景中我们一般都需要让子类的builder继承父类builder的行为。

Lombok在v1.18.2版本中针对这个问题增加了@SuperBuilder注解,子类和父类中都添加@SuperBuilder注解,子类builder即可继承父类builder。

代码示例:

@SuperBuilder
public class Parent {
    // get,set添加在指定属性上
    @Getter @Setter private int id;
    //如果需要让build出的对象属性使用默认值,需要添加@Builder.Default注解
    @Builder.Default
    @Getter @Setter private String name = "unknown";
}

@SuperBuilder
@Data
public class Child extends Parent {
    private String ext;
}

调用示例:

Child c1 = Child.builder().id(1).name("名称").ext("子类属性ext").build();
System.out.println(c1.getId());

需要注意的是: 关于builder的继承,Lombok Plugin尚未更新支持@SuperBuilder,所以以上写法在IDE下还会提示编译错误,等更新吧,或者用稍微蹩脚一点的解决方案:Lombok’s @Builder annotation and inheritance


Diboot - 简单高效的轻代码开发框架

相关文章

  • Gradle项目引入Lombok

    接前面一篇文章 《Lombok常用注解的使用总结》 这里主要讲解,如何在Gradle项目中引入Lombok依赖。 ...

  • Lombok常用注解的使用总结

    Lombok是什么? 一个在编译阶段修改增强Java类的工具,使用方式基于注解,常用于: 为Java POJO生成...

  • 2.使用lombok

    lombok:使用注解的形式来简化一些必要但重复性的代码,在编译时生成对应的代码。 几个常用的 lombok 注解...

  • Java基础系列-Lombok常用注解

    原创文章,转载请标注出处:《Java基础系列-Lombok常用注解》 Lombok注解解析: @NonNull 使...

  • lombok 插件使用技巧

    lombok @EqualsAndHashCode 注解的影响 Java中优雅的使用Lombok

  • Lombok常用注解

    和其他语言相比, Java经常因为不必要的冗长被批评。 Lombok提供了一系列注解用以在后台生成模板代码,将其从...

  • Lombok常用注解

    Project Lombok is a java library that automatically plugs...

  • Lombok常用注解

    Lombok常用注解 加入 maven 依赖 1. @Getter/@Setter 自动产生 getter/set...

  • Lombok 常用注解

    经常用 @Data 注解标记在实体类上面快速实现getter 和 setter, 而它好用地注解应该不至于这一个,...

  • Lombok常用注解

    加入 maven 依赖 Lombok常用注解概览 1. @Getter/@Setter 自动产生 getter/s...

网友评论

    本文标题:Lombok常用注解的使用总结

    本文链接:https://www.haomeiwen.com/subject/nrisfctx.html