使用 Lombok 释放百行代码
1.1 简介
1.1.1 概述
Lombok 项目是一个 Java 库,它会自动插入编辑器和构建工具中,Lombok 提供了一组有用的注释,用来消除 Java 类中的大量样板代码。可以替换数百行代码从而产生干净,简洁且易于维护的 Java 类。Lombok 也存在一定风险,在一些开发工具商店中没有 Project Lombok 支持选择。 IDE 和 JDK 升级存在破裂的风险,并且围绕项目的目标和实施存在争议。
1.1.2 相关依赖
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.12</version>
</dependency>
1.1.3 IDEA 使用 Lombok
想要使用 Lombok 必须要使用支持 Lombok 的开发工具,此处以 IDEA 为例,IDEA 必须要安装相关插件才能使用 Lombok,其他开发工具类似。
1.2 简单实用
1.2.1 常用注解
注解 |
说明 |
---|---|
@Setter |
注解在类或字段,注解在类时为所有字段生成 setter 方法,注解在字段上时只为该字段生成 setter 方法 |
@Getter |
使用方法同上,区别在于生成的是 getter 方法。需要注意的是 Boolean 生成的是 isXxx 不是 getXxx |
@ToString |
注解在类,添加 toString 方法 |
@EqualsAndHashCode |
注解在类,生成 hashCode 和 equals 方法 |
@NoArgsConstructor |
注解在类,生成无参的构造方法 |
@RequiredArgsConstructor |
注解在类,为类中需要特殊处理的字段生成构造方法,比如 final 和被 @NonNull 注解的字段 |
@AllArgsConstructor |
注解在类,生成包含类中所有字段的构造方法 |
@Data【常用】 |
注解在类,生成 setter/getter、equals、canEqual、hashCode、toString 方法,如为 final 属性,则不会为该属性生成 setter 方法 |
@Slf4j |
注解在类,生成 log 变量,严格意义来说是常量 |
1.2.2 示例
/**
* Created with IntelliJ IDEA.
*
* @author Demo_Null
* @date 2020/9/10
* @description Lombok 示例
*/
@Data
public class Student {
private Long id;
private String name;
private Integer age;
private Date birDate;
private String birStr;
}
1.2.4 自定义 setter/getter
/**
* Created with IntelliJ IDEA.
*
* @author Demo_Null
* @date 2020/9/10
* @description 自定义 setter/getter
*/
@Data
public class Student {
private Long id;
private String name;
private Integer age;
private Date birDate;
private String birStr;
/*
* 会使用此处的 setter/getter,lombok 不会再生成对应的方法
*/
public Date getBirDate() {
return birDate;
}
public void setBirDate(Date birDate) {
this.birDate = birDate;
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
this.birStr = sdf.format(birDate);
}
public String getBirStr() {
return birStr;
}
public void setBirStr(String birStr) {
this.birStr = birStr;
}
}
/**
* Created with IntelliJ IDEA.
*
* @author Demo_Null
* @date 2020/9/10
* @description 测试
*/
public class Demo {
public static void main(String[] args) {
Student student = new Student();
student.setBirDate(new Date());
student.setName("张三");
System.out.println(student);
}
}
- 正则表达式中零宽断言的用法
- Spark ReadmeApache Spark
- Apache Spark快速入门
- YARN & Mesos,论集群资源管理所面临的挑战
- Requests库作者Kenneth Reitz的另一神作!虚拟环境及包管理工具Pipenv!
- 你写的单例真的对吗
- TensorFlow layers模块用法
- Spark算子详解及案例分析(分类助记)
- Spark详解07广播变量BroadcastBroadcast
- TensorFlow验证码识别
- python selenium2 开发环境搭建
- 聊聊同步辅助类CountDownLatch
- Java多线程编程笔记之Condition
- python selenium2示例 - 生成 HTMLTestRunner 测试报告
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Python 字典 使用技巧
- 微信小程序生命周期学习笔记-组件
- C语言入门系列之2.数据类型、运算符和表达式
- 树莓派的cpu与gpu通信设计浅析
- Python全栈(七)Flask框架之5.视图高级--类视图和蓝图
- Python全栈(六)项目前导之5.使用GitHub进行多人协同开发
- 附002.Nginx代理相关模块解析
- ApiBoot v2.3.x分支第一个版本发布,重构源码架构设计
- Python全栈(七)Flask框架之1.Flask简介与URL和视图介绍
- 两个CSS知识点:BFC和选择器权重
- C语言入门系列之9.预处理
- Python爬虫常见异常及解决办法
- 理解nodejs中js和c++的通信原理
- 如何使用FFmpeg将互联网直播点播平台内直播视频流转化为HLS流?
- 记一次nodejs问题排查