Web前端之路Android开发经验谈

Java奇淫巧技之 Lombok

2017-10-11  本文已影响144人  angeChen

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

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

Lombok安装

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

  1. 双击下载下来的 JAR 包安装 lombok

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

  1. eclipse 手动安装 lombok

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
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;
}

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

上一篇下一篇

猜你喜欢

热点阅读