Java奇淫巧技之 Lombok

作者: angeChen | 来源:发表于2017-10-11 11:26 被阅读144次

    lombok是一个通过简单的 注解 的形式来简化消除一些必须但显得很臃肿的 Java 代码的工具

    简单来说,比如我们新建了一个javaBean,然后在其中写了几个属性,然后通常情况下我们需要手动去建立getter和setter方法,构造函数之类的,lombok的作用就是为了省去我们手动创建这些代码的麻烦,它能够在我们 编译 的时候自动帮我们生成这些方法。

    Lombok安装

    使用lombok之前需要安装lombok到IDE,否则IDE无法解析lombok注解;首先去官网下载最新的lonbok安装包,网址:https://projectlombok.org/download 有两种安装方式

    1. 双击下载下来的 JAR 包安装 lombok
    • 安装之前先关闭eclipse,然后双击下载的lombok.jar
    • 如果像上图所示提示找不到IDE,则需要手动选择IDE

    出现上面的页面时,点击 Install/Update

    • 打开 Eclipse 的 About 页面我们可以看见,如下图所示,说明安装成功
    1. eclipse 手动安装 lombok
    • 将 lombok.jar 复制到 eclipse.ini 所在的文件夹目录下
    • 打开 eclipse.ini在最后面插入以下两行并保存:
      -Xbootclasspath/a:lombok.jar
      -javaagent:lombok.jar
    • 重启eclipse

    Lombok使用

    1. 在工程中引入lombok

    在pom.xml中加入lombok依赖

    <dependencies>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.16.10</version>
        </dependency>
    </dependencies>
    
    2. Lombok注解
    • @Data(最常用)
      • 包含了:@ToString, @EqualsAndHashCode, @Getter on all fields, @Setter on all non-final fields, and @RequiredArgsConstructor这些注解
      • 注解在类上,提供类所有属性的 getting 和 setting 方法,此外还提供了 equals、canEqual、hashCode、toString 方法
    @Data
    public class Person {
        private final String name;
        private int age;
        private double score;
        private String[] tags;
    }
    

    等价于:

    由上图类结构可以看出,自动添加了set/get方法,同时还有一个带有final字段参数的构造函数

    public Person(String name) {
        this.name = name;
    }
    

    还有toString、equals、canEqual、hashCode方法

    @Override 
    public String toString() {
        return "DataExample(" + this.getName() + ", " + this.getAge() + ", " + this.g   etScore() + ", " + Arrays.deepToString(this.getTags()) + ")";
    } 
    
    @Override 
    protected boolean canEqual(Object other) {
        return other instanceof DataExample;
    }
    
    @Override 
    public boolean equals(Object o) {
        if (o == this) return true;
        if (!(o instanceof DataExample)) return false;
        DataExample other = (DataExample) o;
        if (!other.canEqual((Object)this)) return false;
        if (this.getName() == null ? other.getName() != null : !this.getName().equals(other.getName())) return false;
        if (this.getAge() != other.getAge()) return false;
        if (Double.compare(this.getScore(), other.getScore()) != 0) return false;
        if (!Arrays.deepEquals(this.getTags(), other.getTags())) return false;
        return true;
    }
    
    @Override
    public int hashCode() {
        final int PRIME = 59;
        int result = 1;
        final long temp1 = Double.doubleToLongBits(this.getScore());
        result = (result*PRIME) + (this.getName() == null ? 43 : this.getName().hashCode());
        result = (result*PRIME) + this.getAge();
        result = (result*PRIME) + (int)(temp1 ^ (temp1 >>> 32));
        result = (result*PRIME) + Arrays.deepHashCode(this.getTags());
        return result;
    }
    
    • @value
      @Value 是 @Data 的不可变版本,用作不可变的类,就是只有 getting ,没有 setting

    • @NoArgsConstructor、@AllArgsConstructor

      • @NoArgsConstructor:注解在类上;为类提供一个无参的构造方法
      • @AllArgsConstructor:注解在类上;为类提供一个全参的构造方法

    注:这里只是列出了几个比较常用的,更多请查看官网

    相关文章

      网友评论

        本文标题:Java奇淫巧技之 Lombok

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