Lombok的介绍、使用和缺陷

Lombok的介绍、使用和缺陷

1、Lombok的介绍

Lombok可以通过简单的注解来代替实体类中的getter/setter、equals、toString、构造函数等方法,使代码更加简洁。

2、Lombok的使用

1、安装lombok插件

打开Idea, 左上角菜单选择 ”File --> Settings", 在弹出的对话框中,左侧选择Plugins,搜索栏输入“lombok", 然后点击安装,如下图:
在这里插入图片描述
图片中假如没安装过,应该显示install,在安装好后,重启IDEA会生效。

2、依赖的引用

在项目的pom文件中添加lombok依赖,注意此处scope填写provided,代表这个包不需要打包发布,仅编译时需要用到

<dependency>
       <groupId>org.projectlombok</groupId>
       <artifactId>lombok</artifactId>
       <version>1.16.18</version>
       <scope>provided</scope>
</dependency>

3、注解的使用

@Data注解包含了@Getter、@Setter、@Builder、@ToString、@EqualsAndHashCode、@AllArgsConstructor
、@NoArgsConstructor等注解,会为类的所有属性自动生成setter/getter、equals、hashCode、构造函数、toString等方法,如果只需要某一些功能,可以单独添加具体的注解。

@Data
public class User{
    private Integer id;
    private String name;      
}

等价于添加具体lombok注解的代码:

@Getter
@Setter
@EqualsAndHashCode
@AllArgsConstructor
@NoArgsConstructor
@Builder
@ToString
public class User{
    private Integer id;
    private String name;      
}

等价于以下没有使用lombok的代码:

public class User{
    private Integer id;
    private String name;

    public User() {
    }

    public User(Integer id, String name) {
        this.id = id;
        this.name = name;
    }

    public int getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        User user = (User) o;
        return id == user.id &&
                Objects.equals(name, user.name);
    }

    @Override
    public int hashCode() {

        return Objects.hash(id, name);
    }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", name='" + name + '\'' +
                '}';
    }
}

@Cleanup注解能够自动释放资源。

public   void jedisExample(String[] args) {
    try {
        @Cleanup Jedis jedis =   redisService.getJedis();
    } catch (Exception ex) {
        logger.error(“Jedis异常:,ex)
    }

等价于以下没有使用lombok的代码:

    Jedis jedis= null;
    try {
        jedis = redisService.getJedis();
    } catch (Exception e) {
        logger.error(“Jedis异常:,ex)
    } finally {
        if (jedis != null) {
            try {
                jedis.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
}

@NonNull注解能够为属性、方法或构造函数的参数提供非空检查。

public void notNullExample(@NonNull String string) {
    //方法内的代码
}

等价于以下没有使用lombok的代码:

public void notNullExample(String string) {
    if (string != null) {
        //方法内的代码相当于如下:
    } else {
        throw new NullPointerException("null");
    }
}

3、Lombok的缺陷

1、一旦使用lombok插件,那么团队中其他成员也必须安装此插件,否则会编译报错。
2、使用@Data注解的类被继承后,子类的equals方法的重写会出现只有两个对象是同一个对象时,才返回true,否则总是false,所以会导致equls()方法失效。所以使用@Data注解后,最好不要有继承关系,或则自己重写equals()方法。

发布了36 篇原创文章 · 获赞 28 · 访问量 1505

猜你喜欢

转载自blog.csdn.net/tc979907461/article/details/104962548
今日推荐