Lombok插件

官网

Lombok 是一种 Java 实用工具,可用来帮助开发人员消除 Java 的冗长,尤其是对于简单的 Java 对象(POJO)。它通过注释实现这一目的。通过在开发环境中实现 Lombok,开发人员可以节省构建诸如 hashCode() 和 equals() 这样的方法以及以往用来分类各种 accessor 和 mutator 的大量时间。

自动生成getter、setter、空参构造器、带参构造器、toString等方法,减少代码量,使代码简洁。

1. 使用方法:

  1. idea安装Lombok插件(新版idea会内置)

  2. 添加依赖

    <dependency>
      <groupId>org.projectlombok</groupId>
      <artifactId>lombok</artifactId>
      <version>1.18.20</version>
    </dependency>
    
  3. 使用

    package org.gs.pojo;
    
    import lombok.AllArgsConstructor;
    import lombok.Data;
    import lombok.NoArgsConstructor;
    import lombok.NonNull;
    
    /**
     * @author admin
     * @date 2021/9/10 5:19 下午
     */
    @Data
    @AllArgsConstructor
    @NoArgsConstructor
    public class User {
        @NonNull
        private int id;
        private String name;
        private String pwd;
    
    }
    

2. 注解

注解下具体属性看官网。

  • @NonNull:进行判空检查,如果为空则抛出NullPointerException。
  • @Cleanup:自动关闭流,使用方法:
  • @Cleanup: Reader reader = new FileReader(path);
  • @Getter/@Setter:getter/setter方法
  • @ToString:toString方法
  • @EqualsAndHashCode:equals和hashCode方法
  • @NoArgsConstructor, @RequiredArgsConstructor and @AllArgsConstructor: 无参、带必需参、带参都有的构造方法 其中,必须带参的参数为@NonNull注解的和以final修饰的未经初始化的字段
  • @Data: 生成无参构造、get、set、toStirng、hashCode、equals方法 如与上述带参构造一起使用,则不会自动生成无参构造
  • @Value:和@Data类似,不过会把类的属性转换成final修饰的,不会有setter方法。
  • @Builder:自动为类添加builder模式,可以通过builder来构建对象。不需要再声明构造函数。
  • @SneakyThrows:为类添加try catch模块,不需要编写异常捕获代码。
  • @Synchronized:为类添加同步锁。
  • @With:克隆对象,修改一个值而保留其他值不变。
  • @Log:可以添加输出日志的信息

3. 弊端

  1. 侵入性大
    • 需要在IDE中安装对应插件。
    • 一个人用其他人都得用。
    • 在jar包中使用了Lombok,依赖这个jar包的所有应用都必须安装这个插件。
  2. 可读性低,可调试性低。Lombok在编译才会生成缺失代码。
  3. 影响JDK升级。
  4. 破坏封装性。使用Lombok后,一个类中的所用参数都自动设置了getter和setter方法,导致一些不应该有setter方法的私有属性有被修改的风险。

4. 坑

  1. @Data注释会自动生成equals方法,并且只会比较子类的属性,不会考虑从父类继承的属性。无论父类属性访问权限是否开放。

    解决方法:使用@EqualsAndHashCode(callSuper=true)

Copyright © rootwhois.cn 2021-2022 all right reserved,powered by GitbookFile Modify: 2023-03-05 10:55:52

results matching ""

    No results matching ""