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

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

  • Java奇淫巧技之Lombok

    Lombok是一个可以通过简单的注解形式来帮助我们简化消除一些必须有但显得很臃肿的Java代码的工具,通过使用对应...

  • Java奇淫巧技之Lombok

    http://blog.csdn.net/ghsau/article/details/52334762https:...

  • 奇淫巧技

    input type=file 手机浏览器打开相机 input 元素type=file时 ios内核浏览器默认事件...

  • 开发奇淫巧技

    1.手机在脱离xcode后,重新连接数据线,打开 Debug-attachToProcess,把当前运行进程关联上...

  • JS 奇淫巧技

    作者 | Before Semicolon 译者 | 王强 来源 | 前端之巅 写代码的时候总有一些东西是会重...

  • C++奇淫巧技之SFINAE

    SFINAE 技术,即匹配失败不是错误,英文Substitution Failure Is Not An Erro...

  • Mysql的奇淫巧技

    ``` ###查看时区 show variables like '%time_zone%'; ###日期转为时间戳...

  • 面试奇淫巧技之——自我介绍

    众所周知,自我介绍一般是面试的第一环节,所以在面试中给面试官留下良好的印象是非常有必要的,一定要把个人优势与职位要...

  • iOS中实用小技巧

    iOS开发中的★奇淫巧技★ - iOS开发论坛 - 51CTO技术论坛_中国领先的IT技术社区

网友评论

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

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