Lombok 使用小结

Lombok 使用小结

  • Lombok 简介
  • Lombok 安装
  • Lombok 使用
    • API
    • 示例
  • 示例源码
  • 引用和引申

Lombok 简介

Lombok 是一种 Java 实用工具,可用来帮助开发人员消除 Java 的冗长,尤其是对于简单的 Java 对象(POJO)。它通过注释实现这一目的。通过在开发环境中实现 Lombok,开发人员可以节省构建诸如 hashCode()equals()getter / setter 这样的方法以及以往用来分类各种 accessor 和 mutator 的大量时间。

Lombok 安装

使 IntelliJ IDEA 支持 Lombok 方式如下:

(1)Intellij 设置支持注解处理

点击 File > Settings > Build > Annotation Processors

勾选 Enable annotation processing

(2)安装插件

点击 Settings > Plugins > Browse repositories

查找 Lombok Plugin 并进行安装

重启 IntelliJ IDEA

(3)将 lombok 添加到 pom 文件

<dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.16.8</version>
</dependency>

Lombok 使用

API

Lombok 提供注解 API 来修饰指定的类:

@Getter and @Setter

@Getter and @Setter Lombok 代码:

@Getter @Setter private boolean employed = true;
@Setter(AccessLevel.PROTECTED) private String name;

等价于 Java 源码:

private boolean employed = true;
private String name;public boolean isEmployed() {return employed;
}public void setEmployed(final boolean employed) {this.employed = employed;
}protected void setName(final String name) {this.name = name;
}

@NonNull

@NonNull Lombok 代码:

@Getter @Setter @NonNull
private List<Person> members;

等价于 Java 源码:

@NonNull
private List<Person> members;public Family(@NonNull final List<Person> members) {if (members == null) throw new java.lang.NullPointerException("members");this.members = members;
}@NonNull
public List<Person> getMembers() {return members;
}public void setMembers(@NonNull final List<Person> members) {if (members == null) throw new java.lang.NullPointerException("members");this.members = members;
}

@ToString

@ToString Lombok 代码:

@ToString(callSuper=true,exclude="someExcludedField")
public class Foo extends Bar {private boolean someBoolean = true;private String someStringField;private float someExcludedField;
}

等价于 Java 源码:

public class Foo extends Bar {private boolean someBoolean = true;private String someStringField;private float someExcludedField;@java.lang.Overridepublic java.lang.String toString() {return "Foo(super=" + super.toString() +", someBoolean=" + someBoolean +", someStringField=" + someStringField + ")";}
}

@EqualsAndHashCode

@EqualsAndHashCode Lombok 代码:

@EqualsAndHashCode(callSuper=true,exclude={"address","city","state","zip"})
public class Person extends SentientBeing {enum Gender { Male, Female }@NonNull private String name;@NonNull private Gender gender;private String ssn;private String address;private String city;private String state;private String zip;
}

等价于 Java 源码:

public class Person extends SentientBeing {enum Gender {/*public static final*/ Male /* = new Gender() */,/*public static final*/ Female /* = new Gender() */;}@NonNullprivate String name;@NonNullprivate Gender gender;private String ssn;private String address;private String city;private String state;private String zip;@java.lang.Overridepublic boolean equals(final java.lang.Object o) {if (o == this) return true;if (o == null) return false;if (o.getClass() != this.getClass()) return false;if (!super.equals(o)) return false;final Person other = (Person)o;if (this.name == null ? other.name != null : !this.name.equals(other.name)) return false;if (this.gender == null ? other.gender != null : !this.gender.equals(other.gender)) return false;if (this.ssn == null ? other.ssn != null : !this.ssn.equals(other.ssn)) return false;return true;}@java.lang.Overridepublic int hashCode() {final int PRIME = 31;int result = 1;result = result * PRIME + super.hashCode();result = result * PRIME + (this.name == null ? 0 : this.name.hashCode());result = result * PRIME + (this.gender == null ? 0 : this.gender.hashCode());result = result * PRIME + (this.ssn == null ? 0 : this.ssn.hashCode());return result;}
}

@Data

@Data 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.Overridepublic 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.Overridepublic 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.Overridepublic java.lang.String toString() {return "Company(founder=" + founder + ", name=" + name + ", employees=" + employees + ")";}
}

@Cleanup

@Cleanup Lombok 代码:

public void testCleanUp() {try {@Cleanup ByteArrayOutputStream baos = new ByteArrayOutputStream();baos.write(new byte[] {'Y','e','s'});System.out.println(baos.toString());} catch (IOException e) {e.printStackTrace();}
}

等价于 Java 源码:

public void testCleanUp() {try {ByteArrayOutputStream baos = new ByteArrayOutputStream();try {baos.write(new byte[]{'Y', 'e', 's'});System.out.println(baos.toString());} finally {baos.close();}} catch (IOException e) {e.printStackTrace();}
}

@Synchronized

@Synchronized Lombok 代码:

private DateFormat format = new SimpleDateFormat("MM-dd-YYYY");@Synchronized
public String synchronizedFormat(Date date) {return format.format(date);
}

等价于 Java 源码:

private final java.lang.Object $lock = new java.lang.Object[0];
private DateFormat format = new SimpleDateFormat("MM-dd-YYYY");public String synchronizedFormat(Date date) {synchronized ($lock) {return format.format(date);}
}

@SneakyThrows

@SneakyThrows Lombok 代码:

@SneakyThrows
public void testSneakyThrows() {throw new IllegalAccessException();
}

等价于 Java 源码:

public void testSneakyThrows() {try {throw new IllegalAccessException();} catch (java.lang.Throwable $ex) {throw lombok.Lombok.sneakyThrow($ex);}
}

示例

使用 Lombok 定义一个 Java Bean

import lombok.Data;
import lombok.ToString;@Data
@ToString(exclude = "age")
public class Person {private String name;private Integer age;private String sex;
}

测试

Person person = new Person();
person.setName("张三");
person.setAge(20);
person.setSex("男");
System.out.println(person.toString());
// output: Person(name=张三, sex=男)

示例源码

完整示例:源码

引用和引申

引申

  • JavaStack

参考

  • Lombok 官网
  • Lombok Github
  • IntelliJ IDEA - Lombok Plugin

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/454471.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

html表单input file,input标签type=file的文件上传

一&#xff0c;通过表单提交的方式该提交方式只是提交普通表单&#xff1b;对于file组所选中的文件内容是不上传的&#xff0c;因此需要设置&#xff1a;enctype属性enctype"multipart/form-data"如果想上传多文件&#xff0c;可添加multiple二&#xff0c;通过Ajax异…

AVS游程解码、反扫描、反量化和反变换优化设计

中图分类号:TN919.81   文献标识码:A   文章编号:1009-2552 (2007) 02-0054-04AVS游程解码、反扫描、反量化和反变换优化设计赵 策, 刘佩林(上海交通大学电子工程系, 上海200240)摘 要: 提出了一种适用于AVS的游程解码、反扫描、反量化和反变换硬件结构优化设计方案。根据…

Django REST framework介绍

现在前后端分离的架构设计越来越流行&#xff0c;业界甚至出现了API优先的趋势。 显然API开发已经成为后端程序员的必备技能了&#xff0c;那作为Python程序员特别是把Django作为自己主要的开发框架的程序员&#xff0c;Django REST framework&#xff08;DRF&#xff09;这个…

zabbix 安装_安装zabbix

准备一个纯净环境10.0.0.99首先修改yum源&#xff0c;修改为zabbix清华源&#xff0c;清华源玉zabbix官方源都是同步的&#xff0c;下载速度更快&#xff01;zabbix官方Download Zabbix​www.zabbix.com点击下载&#xff0c;下面有zabbix的历史版本以及官方安装文档可以查看到不…

拓展欧几里得 [Noi2002]Savage

对于一个野人&#xff0c;他&#xff08;她&#xff1f;&#xff09;所在的位置&#xff0c;&#xff08;C[i]x*p[i]&#xff09;%ans,是的&#xff0c;暴力枚举每一个ans&#xff0c;用拓展欧几里得求出每两个wildpeople(wildrage?)相遇的年份&#xff0c;如果小于最小的寿限…

CCNP-19 IS-IS试验2(BSCI)

CCNP-19 IS-IS试验2 实验拓扑&#xff1a;试验要求&#xff1a;R1 R2 R3全部采用集成的ISIS路由协议&#xff0c;R1 R2在区域49.0001内&#xff0c;R3在区域49.0002内&#xff0c;R1与R2之间的链路类型为L1&#xff0c;R2与R3之间的链路类型为L2。 试验目的&#xff1a;掌握基…

正道的光用计算机,正道的光作文500字

当那熟悉的轰天巨雷般的呼噜声响起&#xff0c;我就知道&#xff0c;这又是睡不着的一天。同样在宿舍&#xff1b;同样是小翟&#xff1b;同样的时间&#xff1b;同样在我昏昏欲睡的时候&#xff0c;那个熟悉的呼噜声&#xff0c;它又来了。它将我从即将到来的美梦中惊醒了&…

AVS高清立体视频编码器

一、成果项目背景 电视技术在经历了从黑白到彩色、从模拟到数字的技术变革之后正在酝酿另一场技术革命&#xff0c;从单纯观看二维场景的平面电视跨越到展现三维场景的立体电视。立体电视&#xff0c;又称三维电视(3DTV)&#xff0c;提供了更为丰富的视觉信息和更具临场感的观…

RESTful介绍

RESTful介绍 REST与技术无关&#xff0c;代表的是一种软件架构风格&#xff0c;REST是Representational State Transfer的简称&#xff0c;中文翻译为“表征状态转移”或“表现层状态转化”。阮一峰 理解RESTful架构 RESTful API设计指南 阮一峰 RESTful设计指南 API与用户…

dijkstra算法代码_数据科学家需要知道的5种图算法(附代码)

在本文中&#xff0c;我将讨论一些你应该知道的最重要的图算法&#xff0c;以及如何使用Python实现它们。作者&#xff1a;AI公园导读因为图分析是数据科学家的未来。作为数据科学家&#xff0c;我们对pandas、SQL或任何其他关系数据库非常熟悉。我们习惯于将用户的属性以列的形…

大暴搜 chess

仔细读题&#xff0c;会发现吃掉敌人点对方案数的贡献很神奇。如果走的空格相同&#xff0c;而走的敌人点不同&#xff0c;对答案无贡献&#xff0c;而对于走的空格相同&#xff0c;但一种走了敌人点&#xff0c;另一种没走&#xff0c;算两个方案。。。。sb出题人语文简直是和…

网站的SEO以及它和站长工具的之间秘密

博客迁移没有注意 URL 地址的变化&#xff0c;导致百度和 google 这两只爬虫引擎短时间内找不到路。近段时间研究了下国内最大搜索引擎百度和国际最大搜索引擎google的站长工具&#xff0c;说下感受。 百度的站长工具地址&#xff1a;http://zhanzhang.baidu.com/dashboard/ind…

html 缩略图点击预览,[每天进步一点点~] uni-app 点击图片实现预览图片列表

点击图片&#xff0c;实现预览图片功能&#xff0c;并且可循环预览图片列表&#xff01;image.png一、多张图片预览html代码js代码data(){return {photos:[{ src: 图片路径1},{ src: 图片路径2},{ src: 图片路径3},……]}},methods: {// 预览图片previewImage(index) {let phot…

git ssh拉取代码_阿里云搭建git服务器

一.搭建步骤&#xff0c;分为两步搭建中心仓库自动同步代码到站点目录二.详细步骤如下1.先检查一下服务器上有没有安装gitgit --version如果出现版本号&#xff0c;说明服务器已经安装git&#xff0c;如图所示&#xff1a;2.如果没有版本信息&#xff0c;则先安装git&#xff1…

Django REST framework 序列化

创建一个序列化类 使用序列化有四种方式 使用json模块&#xff0c;完全手写使用django自带的序列化模块 1&#xff0c;# from django.core import serializers 2&#xff0c;# dataserializers.serialize(“json”,book_list)使用REST framework 带的序列化方法&#xff0c…

基于SIMD的AVS整数反变换算法设计与优化

基于SIMD 的AVS 整数反变换算法设计与优化王玲娟&#xff0c;张刚**作者简介&#xff1a;王玲娟&#xff0c;&#xff08;1987-&#xff09;&#xff0c;女&#xff0c;在读硕士&#xff0c;主要研究方向&#xff1a;视频解码算法通信联系人&#xff1a;张刚&#xff0c;&#…

Word -- 列表重新编号

Word -- 列表重新编号office一言&#xff1a;我小心翼翼地灌溉&#xff0c;一日复一日地期待&#xff0c;那么费力&#xff0c;植成参天的乔木&#xff0c;岂愿见你终有一日从容赴死&#xff1f;问题 word 文档早就想解决的一个问题&#xff0c;这次遇到了就上网找解决掉了&…

非持久连接和持久连接

非持久连接和持久连接 HTTP既可以使用非持久连接(nonpersistent connection)&#xff0c;也可以使用持久连接(persistent connection)。HTTP/1.0使用非持久连接&#xff0c;HTTP/1.1默认使用持久连接。 非持久连接 让我们查看一下非持久连接情况下从服务器到客户传送一个Web页面…

计算机开机键鼠无法识别,我得电脑一开机就检测不到键盘和鼠标

2005-10-18 16:06:131、开机后当出现dos界面时&#xff0c;按一下pause键(这个键在四个方向键的上边&#xff0c;仔细找就能找到)&#xff0c;如果计算机启动停止&#xff0c;说明你的键盘起作用&#xff0c;主板在开机时就已经检测到了鼠标键盘。启动后不能使用鼠标键盘&#…

vs2003 局部友元访问私有不可访问_C++ 类:重载运算符与友元

18.类中重载运算符与友元上次节中学习了如何在类中重新定义赋值()运算符&#xff0c;实际上在一个自定义类中除了赋值()运算符外&#xff0c;类的对象是不可以直接使用运算符的&#xff0c;比如你在main函数中写这样的代码会报错&#xff1a;如果想解决这些报错问题&#xff0c…