前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >【译】利用Lombok消除重复代码

【译】利用Lombok消除重复代码

作者头像
Jackeyzhe
发布于 2020-03-11 05:05:45
发布于 2020-03-11 05:05:45
1.1K00
代码可运行
举报
文章被收录于专栏:代码洁癖患者代码洁癖患者
运行总次数:0
代码可运行

当你在写Getter和Setter时,一定无数次的想过,为什么会有POJO这么烂的东西。你不是一个人!(不是骂人…)无数的开发人员花费了大量的时间来写这种样板代码,而他们本来可以利用这些时间做出更有价值的输出。

从我开始写Java以来,已经写了几千行代码了,其中大概50%都是样板代码,在转型之前,我就这么一直毫无怨言的写着。而最近两年,我不再Java了,转而开始写一些Python,Go和JavaScript的代码。这时我才感觉到Java中的重复的样板代码是多么令人沮丧。

值得庆幸的是,现在的IDE为我们提供了自动生成这些代码的功能。但是我仍然需要按快捷键或者点鼠标来操作,这是非常影响我的编码思路的。

Lombok简介

Project Lombok is a java library that automatically plugs into your editor and build tools, spicing up your java. Never write another getter or equals method again

上面这段话摘自Lombok的首页。这是一个每个人都需要使用的库,简直是一种仙丹!开个玩笑。Java是一门很棒的语言,但是它的冗长经常会令人感到苦恼。

Lombok到底有多香呢?我总结了以下几点:

  1. Getter和Setter注解会自动生成getter、setter方法
  2. NoArgsConstructor和AllArgConstructor可以帮助你快速生成构造函数
  3. ToString会使POJO打印更加友好的日志
  4. Data会让你的POJO成为一个完全符合规范的POJO
  5. SneakyThrows可以偷偷抛出检查异常,而不需要再写throws子句

想了解更多Lombok特性的话,可以自行前往https://projectlombok.org/features/all查看。

Lombok是如何工作的?

Lombok是在Java注解处理器和几个编译时注解的帮助下工作的,它将注入额外的Java字节码来帮助我们处理重复的代码。你可以查看它生成的Java代码,这一过程被幽默的称为“Delombokisation”。

我应该如何开始使用?

Lombok引入了一个额外的编译时依赖。

如果你使用vanilla javac进行编译,你需要指定lombok.jar作为注解处理器:javac -cp lombok.jar MyCode.java

如果你使用的是maven,那么需要在pom.xml中插入以下代码来保证你的代码可以使用Lombok。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<dependencies>
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <version>1.18.4</version>
        <scope>provided</scope>
    </dependency>
</dependencies>

如果你使用的是Gradle,那么你需要使用Gradle Lombok插件

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
plugins {
    id 'io.franzbecker.gradle-lombok' version '1.14'
    id 'java'
}
设置你的IDE

从你开始使用Java起,你应该就开始使用一个智能的IDE来自动编译或给你的代码提供一些建议。为了将Lombok集成进IDE,你需要告诉Lombok io来安装合适的钩子。

获取Lombok的jar包后,执行java -jar lombok.jar来完成所有的设置。

IntelliJ IDEAVisual Studio用户需要一个单独的Lombok插件,你可以选择从插件库中安装。

代码拿来!

talk is cheap, show me your code.程序员就应该拿代码说话。下面我们就来看一个完整的例子。

Getters和Setters

为被注解的自动生成getXXX和setXXX方法。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import lombok.Getter;
import lombok.Setter;

class UptimeResponse {
    // GetXXX and SetXXX are automatically generated
    @Getter @Setter private long uptime;
    @Getter @Setter private long currentTime;
    @Getter @Setter private String status;
    UptimeResponse() {
        this.uptime = ManagementFactory
                          .getRuntimeMXBean().getUptime();
        this.currentTime = System.currentTimeMillis();
        this.status = "OK";
    }
}
// So this works automagically
UptimeResponse res = new UptimeResponse();
res.setStatus("FAIL");
System.out.println(res.getUptime());
Constructors

可以自动创建默认的POJO构造函数,它将字段初始化为默认值。

  1. NoArgConstructor创建一个无参构造函数,所有的字段都会初始化为默认值
  2. AllArgsConstructor创建一个全参数构造函数,每个字段都会初始化为指定值
  3. RequiredArgsConstructor创建一个构造函数,参数包括所有final字段和标记为NotNull的字段
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import lombok.*

@AllArgsConstructor
class Document {
    @Getter @Setter private String title;
    @Getter @Setter private String content;
    // ...
}
// This works automagically
Document d = new Document("Hello World", "Message Body");
d.getTitle();   // Hello World
d.getContent(); // Message Body
Equals and hash codes

Lombok可以生成的样板代码是包含局部变量的equals方法和hashcode方法。你可以手动排除一些字段。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import lombok.*;

@RequiredArgsConstructor
@EqualsAndHashCode
class User {
    @Getter
    private final String username;
    @EqualsAndHashCode.Exclude
    @Getter
    @Setter
    private String lastAction;  // not required for equality checks
}
// This works automagically
User u1 = new User("amitosh");
u1.setLastAction("Hello");
User u2 = new User("amitosh");
u2.setLastAction("Compile");
u1.equals(u2) // Gives true
To String

Lombok的ToString注解自动生成toString方法,其中包含类封装的全部字段。这是用于生成调试表示的快速方法。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import lombok.ToString;
import lombok.Getter;
import lombok.Setter;

@ToString
class Entry {
    @Getter @Setter private String id;
    @Getter @Setter private String target;
}
// This works automagically
Entry e = new Entry();
// ...
System.out.println(e);  // Nice output with values of id and target
Data classes

这个注解用于生成符合规范的完整POJO。它是ToString、EqualsAndHashCode以及所有非final字段的Getter和Setter的集合体。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import lombok.Data;

@Data
class Message {
    private String sender;
    private String content;
}
// This works automagically
Message m = new Message("amitosh", "Hello World");
m.setSender("agathver");
m.getContent();  // Hello World
m.toString();    // ...
SneakyThrows

Java是一门静态检查语言,但有时检查会比较多余。例如有时我们不关心异常,或者确定代码中不会出现异常,所以就不想去写捕获和处理异常的代码。这时SneakyThrows注解可以帮助我们一起骗过编译器

但要注意不能滥用这个注解。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import lombok.SneakyThrows;

public class SneakyThrowsExample {
   @SneakyThrows(UnsupportedEncodingException.class)
   public String utf8ToString(byte[] bytes) {
       // This exception is never generated as UTF-8 is guaranteed
       // to be supported by the JVM
       return new String(bytes, "UTF-8");
   }
}

Delomboking

不是所有的工具都支持Lombok的,最著名的是JavaDoc工具。你需要有一个中间态的代码来使文档正确表示。此外,有时候你可能会想看看Lombok生成的代码到底是什么样的。幸好Lombok提供了“delomboking”,用来将Lombok转换成Java源代码。

要转换一个文件夹下的全部代码,可以使用以下命令:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
java -jar lombok.jar delombok src -d src-delomboked

maven和gradle插件也包含了delomboking任务,在你需要的时候可以使用。

Lombok是一个提高你的Java生产力的工具。我无法想象没有它时应该怎么写Java程序。真心希望你在读完本文以后能够认识到它的强大!

原文地址

https://medium.com/@agathver/banish-repetitive-java-code-with-lombok-f9b97d0d4137

译者点评

Lombok是一款非常好用的工具,它可以帮助我们快速构建POJO类。但是如果直接使用@Data注解时,会破坏类的封装特性。这点不符合面向对象编程的思想,但工作中会使用一些序列化工具,这些工具要求所有字段都要有setter方法。为了编码的方便,可能使用@Data方法是一个好的选择。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-11-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 代码洁癖患者 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
IDEA 2022 之 Lombok 使用 教程
​ Lombok是使用java编写的一款开源类库。其主作用是使用注解来代替一些具有格式固定,没有过多技术含量的编码工作。使我们可以仅仅在代码中添加一个注解(annotation),就可以起到和编写一大段代码一样的作用。对于这些格式固定的的代码,IDE也提供了自动生成的功能,但是无论是自动生成还是纯手动写,这些代码在类中是实实在在的存在,有时候,看到一个类文件很长,其中却都是一些,没有任何技术含量的getter和setter方法。无疑会影响我们的代码阅读。而使用Lombok可以将这些“无用”的代码,通过相应的注解替换掉。好了,废话少说,进入主题:
猫头虎
2024/04/08
4100
IDEA 2022 之 Lombok 使用 教程
优雅的JAVA工具库LOMBOK
最近在公司的项目中看到了对于Lombok的应用,通过@Data注解标注POJO,省略了大量的getter/setter代码,原先冗长的POJO在瘦身之后直接变得干净、清爽,程序员再也不需要去关注那些长长的方法,只需要集中注意力于字段field之中
java架构师
2019/01/03
5320
Java避坑指南:慎用Lombok 代码自动生成工具
Lombok在java开发者当中作为比较知名的自动代码生成工具,经常用来自动生成set方法、get方法、equals 方法、 hashCode 方法、构造函数方法、log变量生成等。
崔认知
2023/06/20
5770
Java避坑指南:慎用Lombok 代码自动生成工具
Java 程序员利器:lombok神工具
Lombok是一款非常实用Java工具,它可以帮助开发人员减少样板代码,使开发人员专注业务逻辑,在Java界几乎无人不知。
终码一生
2022/04/15
3350
Java 程序员利器:lombok神工具
MyBatis 从入门到精通:Java开发的新利器Lombok
在Java开发中,简洁高效的代码编写是开发者们一直追求的目标。而Lombok作为一个Java库,能够极大地简化Java代码的编写,提高开发效率。本文将深入探讨Lombok的使用方法、核心功能以及实践步骤,并探讨其在项目开发中的应用。
默 语
2024/11/20
1280
​ 🚀 掌握Lombok:Java开发者的瑞士军刀,让代码飞起来! 🚀
Java,这个拥有悠久历史的编程语言,一直在不断地进化。而在这个进化的过程中,有许多工具和库的出现,极大地提高了开发者的效率。今天,我们要聊的就是其中的一个神器——Lombok。如果你还没有听说过Lombok,或者只是浅尝辄止,那么这篇文章将会是你深入理解并掌握Lombok的起点。准备好了吗?让我们一起探索Lombok的高级知识点,让你的代码更加简洁、高效!
疯狂的KK
2024/04/16
3580
​ 🚀 掌握Lombok:Java开发者的瑞士军刀,让代码飞起来! 🚀
Lombok快速入门
为什么说Lombok可以使代码更简洁、可以消除冗长代码呢?我们来拿lombok官网的一个例子来说:
端碗吹水
2020/09/23
1.1K0
Lombok快速入门
如何用好 IDEA ,Java 撸码效率至少提升 5 倍?
以前的Java项目中,充斥着太多不友好的代码:POJO的getter/setter/toString;异常处理;I/O流的关闭操作等等,这些样板代码既没有技术含量,又影响着代码的美观,Lombok应运而生。
芋道源码
2019/06/15
5520
Java效率工具Lombok使用及原理
在过往的Java项目中,充斥着太多不友好的代码:POJO的getter/setter/toString;异常处理;I/O流的关闭操作等等,这些样板代码既没有技术含量,又影响着代码的美观,Lombok应运而生。
Bug开发工程师
2019/05/05
5650
Java效率工具Lombok使用及原理
一份不可多得的 Lombok 学习指南
Lombok 是一款 Java 开发插件,使得 Java 开发者可以通过其定义的一些注解来消除业务工程中冗长和繁琐的代码,尤其对于简单的 Java 模型对象(POJO)。在开发环境中使用 Lombok 插件后,Java 开发人员可以节省出重复构建,诸如 hashCode 和 equals 这样的方法以及各种业务对象模型的 accessor 和 toString 等方法的大量时间。对于这些方法,Lombok 能够在编译源代码期间自动帮我们生成这些方法,但并不会像反射那样降低程序的性能。
阿宝哥
2019/11/06
9660
一份不可多得的 Lombok 学习指南
一份不可多得的 Lombok 学习指南
Lombok 是一款 Java 开发插件,使得 Java 开发者可以通过其定义的一些注解来消除业务工程中冗长和繁琐的代码,尤其对于简单的 Java 模型对象(POJO)。在开发环境中使用 Lombok 插件后,Java 开发人员可以节省出重复构建,诸如 hashCode 和 equals 这样的方法以及各种业务对象模型的 accessor 和 toString 等方法的大量时间。对于这些方法,Lombok 能够在编译源代码期间自动帮我们生成这些方法,但并不会像反射那样降低程序的性能。
江南一点雨
2019/11/06
8860
一份不可多得的 Lombok 学习指南
Java开发的效率工具--Lombok
Project Lombok is a java library that automatically plugs into your editor and build tools, spicing up your java.Never write another getter or equals method again, with one annotation your class has a fully featured builder, Automate your logging variables, and much more. ######################################################## 大概的意思:Lombok是一个Java库,能自动插入编辑器并构建工具,简化Java开发。通过添加注解的方式,不需要为类编写getter或eques方法,同时可以自动化日志变量。
框架师
2020/07/09
7240
Java开发的效率工具--Lombok
优雅的Java工具库Lombok
最近在公司的项目中看到了对于Lombok的应用,通过@Data注解标注POJO,省略了大量的getter/setter代码,原先冗长的POJO在瘦身之后直接变得干净、清爽,程序员再也不需要去关注那些长长的方法,只需要集中注意力于字段field之中
互扯程序
2018/10/08
1.2K0
优雅的Java工具库Lombok
Java奇淫巧技之Lombok
高爽
2017/12/28
1K0
Java奇淫巧技之Lombok
Lombok
定位到file/setings/plugins/markeptlace搜索Lombok
框架师
2021/03/08
6060
Lombok
Lombok,简化代码的神器,你值得拥有
本文给大家介绍一个Java代码简化的神器 -- Lombok。主要从如下几个方面进行展开:
孟君
2019/08/26
1.6K0
Lombok,简化代码的神器,你值得拥有
JAVA奇技淫巧简化代码之lombok
背景 最近在做一个小功能,又不想在原有体态臃肿的项目中追加,为了调试方便并且可以快速开发就采用了springboot。由于使用了JPA,建了几个类,然后通过IDE去生成其属性的构造器、getter、setter、equals、hashcode、toString方法,那么Java中有没有一种方式能够避免这种重复的劳动呢?答案是有,想着前几天听说有一款简化神奇Lombok,特此拿来玩玩记录一下。 简介 Lombok是一个可以通过简单的注解形式来帮助我们简化消除一些必须有但显得很臃肿的Java代码的工具,通过使用
小柒2012
2018/04/16
1.3K0
JAVA奇技淫巧简化代码之lombok
十分钟搞懂Java效率工具Lombok使用与原理
Lombok是一款好用顺手的工具,就像Google Guava一样,在此予以强烈推荐,每一个Java工程师都应该使用它。Lombok是一种Java™实用工具,可用来帮助开发人员消除Java的冗长代码,尤其是对于简单的Java对象(POJO)。它通过注释实现这一目的。通过在开发环境中实现 Lombok,开发人员可以节省构建诸如hashCode()和equals()这样的方法以及以往用来分类各种accessor和mutator的大量时间。
java思维导图
2019/12/05
6710
十分钟搞懂Java效率工具Lombok使用与原理
简化开发|Lombok神器带你消除冗余代码
Lombok是一款Java开发插件,使得Java开发者可以通过其定义的一些注解来消除业务过程中冗余的代码,尤其是简单的Java模型对象(POJO)。而当我们如果在开发环境中使用Lombok开发插件后,可以省出重复构建,诸如hashCode和equals这样的方法以及各种业务对象模型的accessor和ToString等方法的大量时间。对于这些方法,它能够在编译源代码期间自动帮我们生产这些方法,并没有如反射那样降低程序的性能。本文将带大家详细介绍关于Lombok的使用以及原理。
浅羽技术
2020/12/07
5400
简化开发|Lombok神器带你消除冗余代码
SpringBoot(四)SpringBoot中lombok使用
lombok概述 lombok简介 Lombok想要解决了的是在我们实体Bean中大量的Getter/Setter方法,以及toString, hashCode等可能不会用到,但是某些时候仍然需要复写,以期方便使用的方法;在使用Lombok之后,将由其来自动帮你实现代码生成,注意,其是 在运行过程中,帮你自动生成的 。就是说,将极大减少你的代码总量。 lombok作用 消除模板代码 getter、setter、构造器、toString()、equals() 便捷的生成比较复杂的代码,例如一个
用户1195962
2018/03/28
1.3K0
SpringBoot(四)SpringBoot中lombok使用
相关推荐
IDEA 2022 之 Lombok 使用 教程
更多 >
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验