Lombok 安装、入门 - 消除冗长的 java 代码

一、介绍

  lombok是一个帮助简化代码的工具,通过注解的形式例如@Setter @Getter,可以替代代码中的getter和setter方法,虽然eclipse自带的setter、getter代码生成也不需要我们手动的去敲写,但是使用@Setter @Getter这样的注解,能够使我们的代码看上去更加的简洁、优雅。

  官网:https://projectlombok.org/

  

二、安装

   使用 lombok 是需要安装的,如果不安装,IDE 则无法解析 lombok 注解

1、下载lombok插件

  官网:https://www.projectlombok.org/download

  百度云:

    链接:https://pan.baidu.com/s/1Z4sKHNUPGFhLMJs6rQ1oUg
    提取码:nmqc

2、将下载的lombok.jar放在eclipse.ini同级目录下

3、运行jar包(直接点击或者cmd命令:java -jar lombok.jar )

4、选择编译器地址打钩,如果没有识别到电脑上的IDE可以点击下方的Specify location添加ide可执行文件路径

 

5、 检查eclipse.ini文件中-javaagent:D:\xxx\lombok.jar地址是否有误(如果路径含中文会启动失败)

 6、重启eclipse,就发现能够正常使用啦

 

三、使用

  注意:使用之前需要先按照以上步骤安装,在eclipse.ini配置

1、引入依赖

  在pom.xml中添加如下依赖:

<!-- 简化代码工具lombok -->
<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <scope>provided</scope>
</dependency>

2、常见注解解析

  Lombok的使用方法只需在对用类或方法添加对应注解即可

  在线官方文档:https://projectlombok.org/features/all

(1)@Getter@Setter

  该注解使用在类或者属性上,该注解可以使用在类上也可以使用在属性上。生成的getter遵循布尔属性的约定。例如:boolean类型的Foo,getter方法为isFoo而不是getFoo在使用该注解时,会默认生成一个无参构造。和对应的getter, setter。

  关于boolean类型的数据,仔细看以下例子:

package com.lemon.zuul.config;
import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
public class TestDemo {
  private String userName;
  private int userAge;
  private boolean userSex ;
  private boolean isLeader;
}

  图中布尔类型为基本数据类型

  setter方法

  上图第一行为成员变量isLeader的setter方法,其中isLeader中的is不见了,下方第四行为成员变量userSex的setter方法,一切正常。

  getter方法

  长这样,get方法的生成规范是对于布尔基本数据类型是is+变量名,如果变量名包含了一个is那么也是只有一个is不会是isIsxxx。

  eclipse自动生成规则同上

  修改布尔变量为对应包装类

package com.lemon.zuul.config;
import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
public class TestDemo {
  private String userName;
  private int userAge;
  private Boolean userSex ;
  private Boolean isLeader;
}

  setter方法

   符合我们想要的

  getter方法

   也符合我们想要的

  总结:布尔类型为对应包装类时,setter、getter生成符合我们预期结果,而为基本数据类型时,get类的方法是以is开头。

(2)@Data

  该注解使用在类上,该注解是最常用的注解,它结合了@ToString,@EqualsAndHashCode, @Getter和@Setter。本质上使用@Data注解,类默认@ToString@EqualsAndHashCode以及每个字段都有@Setter@getter。该注解也会生成一个公共构造函数,可以将任何@NonNullfinal字段作为参数。

  虽然@Data注解非常有用,但是它没有与其他注解相同的控制粒度。@Data提供了一个可以生成静态工厂的单一参数,将staticConstructor参数设置为所需要的名称,Lombok自动生成的构造函数设置为私有,并提供公开的给定名称的静态工厂方法。 

  注解示例:

@Data(staticConstructor="of")
public class Company {
    private final Person founder;
    private String name;
    private List<Person> employees;
}

  等同于Java源代码:

public class Company {
    private final Person founder;
    private String name;
    private List<Person> employees;

    private Company(final Person founder) {
        this.founder = founder;
    }

    public static Company of(final Person founder) {
        return new Company(founder);
    }

    public Person getFounder() {
        return founder;
    }

    public String getName() {
        return name;
    }

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

    public List<Person> getEmployees() {
        return employees;
    }

    public void setEmployees(final List<Person> employees) {
        this.employees = employees;
    }

    @java.lang.Override
    public boolean equals(final java.lang.Object o) {
        if (o == this) return true;
        if (o == null) return false;
        if (o.getClass() != this.getClass()) return false;
        final Company other = (Company)o;
        if (this.founder == null ? other.founder != null : !this.founder.equals(other.founder)) return false;
        if (this.name == null ? other.name != null : !this.name.equals(other.name)) return false;
        if (this.employees == null ? other.employees != null : !this.employees.equals(other.employees)) return false;
        return true;
    }

    @java.lang.Override
    public int hashCode() {
        final int PRIME = 31;
        int result = 1;
        result = result * PRIME + (this.founder == null ? 0 : this.founder.hashCode());
        result = result * PRIME + (this.name == null ? 0 : this.name.hashCode());
        result = result * PRIME + (this.employees == null ? 0 : this.employees.hashCode());
        return result;
    }

    @java.lang.Override
    public java.lang.String toString() {
        return "Company(founder=" + founder + ", name=" + name + ", employees=" + employees + ")";
    }

}

(3)@NonNull

  该注解使用在属性上,该注解用于属的非空检查,当放在setter方法的字段上,将生成一个空检查,如果为空,则抛出NullPointerException。 该注解会默认是生成一个无参构造。 

  注解示例和Java源代码:

 (4)@EqualsAndHashCode

  该注解使用在类上,该注解在类级别注释会同时生成equalshashCode

  注解示例和Java源代码:

 (5)@toString

  该注解使用在类上,该注解默认生成字段以名称-值的形式输出。 

  注解示例和Java源代码:

 (6)@Value

  这个注解用在 类 上,会生成含所有参数的构造方法,get 方法,此外还提供了equals、hashCode、toString 方法。 没有setter 

(7) @Log4j

  注解在类上;为类提供一个 属性名为log 的 log4j 日志对象

(8)NoArgsConstructor

  注解在类上;为类提供一个无参的构造方法

(9)AllArgsConstructor

  注解在类上;为类提供一个全参的构造方法

posted @ 2020-07-29 19:21  沧海一粟hr  阅读(292)  评论(0编辑  收藏  举报