如何使用Lombok来优雅的编码

简介: 前言Lombok 是一种 Java™ 实用工具,可用来帮助开发人员消除 Java 的冗长,尤其是对于简单的 Java 对象(POJO)。它通过注解实现这一目的。

前言


Lombok 是一种 Java™ 实用工具,可用来帮助开发人员消除 Java 的冗长,尤其是对于简单的 Java 对象(POJO)。它通过注解实现这一目的。

安装Lombok


打开 IDEA 的 Settings 面板,并选择 Plugins 选项,然后点击 “Browse repositories”

在输入框输入”lombok”,得到搜索结果,点击安装,然后安装提示重启 IDEA,安装成功;


img_fad1ebd1ea58764ad10d7ebe5521d314.png
image.png

引入依赖

在自己的项目里添加 lombok 的编译支持,在 pom 文件里面添加 dependency

<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>1.16.18</version>
    <scope>provided</scope>
</dependency>

注解简述

  • @Data = get + set + equal + canEqual + hashCode + toString
  • @Setter
  • @Getter
  • @Slf4j 注解在 类 上;为类提供一个 属性名为 log 的日志对象,提供默认构造方法。
  • @AllArgsConstructor 注解在 类 上;为类提供一个全参的构造方法
  • @NoArgsConstructor 注解在 类 上;为类提供一个无参的构造方法。
  • @EqualsAndHashCode 注解在 类 上, 可以生成 equals、canEqual、hashCode 方法。
  • @NonNull 注解在 属性 上,会自动产生一个关于此参数的非空检查,如果参数为空,则抛出一个空指针异常
  • @Cleanup 这个注解用在 变量 前面,可以保证此变量代表的资源会被自动关闭
  • @ToString 这个注解用在 类 上,可以生成所有参数的 toString 方法,还会生成默认的构造方法
  • @RequiredArgsConstructor 这个注解用在 类 上,使用类中所有带有 @NonNull 注解的或者带有 final 修饰的成员变量生成对应的构造方法。
  • @Value 这个注解用在 类 上,会生成含所有参数的构造方法,get 方法,此外还提供了equals、hashCode、toString 方法。
  • @SneakyThrows 这个注解用在 方法 上,可以将方法中的代码用 try-catch 语句包裹起来,捕获异常并在 catch 中用 Lombok.sneakyThrow(e) 把异常抛出,可以使用 @SneakyThrows(Exception.class) 的形式指定抛出哪种异常
  • @Synchronized 这个注解用在 类方法 或者 实例方法 上,效果和 synchronized 关键字相同

注解详解

@Data

注解在 上;提供类所有属性的 get 和 set 方法,此外还提供了equals、canEqual、hashCode、toString 方法。

img_17a82b76c065f1ce8eb7bec223d3ae8d.png
mark

@Setter

注解在 属性 上;为单个属性提供 set 方法; 注解在 上,为该类所有的属性提供 set 方法, 都提供默认构造方法。

img_57fdbdd3824cb1a90b6f4d2dd2d6d7d5.png
mark
img_5f1cd2cae085ac129473a2230c19f714.png
mark

@Getter

注解在 属性 上;为单个属性提供 get 方法; 注解在 上,为该类所有的属性提供 get 方法,都提供默认构造方法。

img_ad157f5bceba0e915351b8cf1c85d30e.png
mark
img_3da82857b2cf4ef745d830898f9fef53.png
mark

@Slf4j

注解在 上;为类提供一个 属性名为 log 的日志对象,提供默认构造方法。

//类上面注解了,直接调用 log 即可:
log.info(xxxx);

@AllArgsConstructor

注解在 上;为类提供一个全参的构造方法,加了这个注解后,类中不提供默认构造方法了。

img_f98ce801497014ad64cadbc964b673e7.png
mark

@NoArgsConstructor

注解在 上;为类提供一个无参的构造方法。

img_4ac23f91f1544e19001fbda43f4351ae.png
mark

@EqualsAndHashCode

注解在 上, 可以生成 equals、canEqual、hashCode 方法。

img_0b261af6776ee318eccd4e03c623ea81.png
mark

@NonNull

注解在 属性 上,会自动产生一个关于此参数的非空检查,如果参数为空,则抛出一个空指针异常,也会有一个默认的无参构造方法。

img_b4f559200505210d002f8f500006d9a0.png
mark

@Cleanup

这个注解用在 变量 前面,可以保证此变量代表的资源会被自动关闭,默认是调用资源的 close() 方法,如果该资源有其它关闭方法,可使用 @Cleanup(“methodName”) 来指定要调用的方法,也会生成默认的构造方法

img_508beb722371e1571b30339adfbc439e.png
mark

@ToString

这个注解用在 上,可以生成所有参数的 toString 方法,还会生成默认的构造方法。

img_89c5559467156d0b45a2190fd528961e.png
mark

@RequiredArgsConstructor

它们都有三个参数可以设置

1、String staticName() default "";

如果设置了它,将原来的构造方法的访问修饰符将会变成 私有的,而外添加一个静态构造方法,参数相同,名字是设置的字符串的名字,访问修饰符为公有的。

2、AnyAnnotation[] onConstructor() default {};
在构造方法上添加注解。使用方法@RequiredArgsConstructor(onConstructor=@__({@AnnotationsGoHere}))}

例如我们在 Spring 项目中需要注入多个值,写很多个 @Autowired 很麻烦,就可以使用这种方式:

@Service
@RequiredArgsConstructor(onConstructor = @__(@Autowired))
public class UserServiceImpl implements IUserService {
    private final IUserRepository userRepository;
    private final IOrderRepository orderRepository;
    ………………

3、AccessLevel access() default lombok.AccessLevel.PUBLIC;
构造函数访问修饰符;

@Value

这个注解用在 上,会生成含所有参数的构造方法,get 方法,此外还提供了equals、hashCode、toString 方法。

img_fa5ad822893da18b395bbd86df07d8fa.png
mark

@SneakyThrows

这个注解用在 方法 上,可以将方法中的代码用 try-catch 语句包裹起来,捕获异常并在 catch 中用 Lombok.sneakyThrow(e) 把异常抛出,可以使用 @SneakyThrows(Exception.class) 的形式指定抛出哪种异常,也会生成默认的构造方法。

img_b1b4993614faa9ef7fc25ba92a56c104.png
mark

@Synchronized

这个注解用在 类方法 或者 实例方法 上,效果和 synchronized 关键字相同,区别在于锁对象不同,对于类方法和实例方法,synchronized 关键字的锁对象分别是类的 class 对象和 this 对象,而 @Synchronized 的锁对象分别是 私有静态 final 对象 lock 和 私有 final 对象 lock,当然,也可以自己指定锁对象,此外也提供默认的构造方法。

img_8f6a9943505dfa18d965011a00cd5a5a.png
mark

总结

本文主要站在巨人的肩上,文章内容来源一下三篇文章。本文主要提取了三篇文章中的优点整合而成。


文章参考:

相关文章
|
29天前
|
Java
Java开发实现图片URL地址检验,如何编码?
【10月更文挑战第14天】Java开发实现图片URL地址检验,如何编码?
60 4
|
25天前
|
Java
Java实现随机生成某个省某个市的身份证号?如何编码?
【10月更文挑战第18天】Java实现随机生成某个省某个市的身份证号?如何编码?
95 5
|
29天前
|
Java
Java开发实现图片地址检验,如果无法找到资源则使用默认图片,如何编码?
【10月更文挑战第14天】Java开发实现图片地址检验,如果无法找到资源则使用默认图片,如何编码?
55 2
|
3月前
|
安全 Java API
告别繁琐编码,拥抱Java 8新特性:Stream API与Optional类助你高效编程,成就卓越开发者!
【8月更文挑战第29天】Java 8为开发者引入了多项新特性,其中Stream API和Optional类尤其值得关注。Stream API对集合操作进行了高级抽象,支持声明式的数据处理,避免了显式循环代码的编写;而Optional类则作为非空值的容器,有效减少了空指针异常的风险。通过几个实战示例,我们展示了如何利用Stream API进行过滤与转换操作,以及如何借助Optional类安全地处理可能为null的数据,从而使代码更加简洁和健壮。
108 0
|
1月前
|
存储 缓存 Java
java基础:IO流 理论与代码示例(详解、idea设置统一utf-8编码问题)
这篇文章详细介绍了Java中的IO流,包括字符与字节的概念、编码格式、File类的使用、IO流的分类和原理,以及通过代码示例展示了各种流的应用,如节点流、处理流、缓存流、转换流、对象流和随机访问文件流。同时,还探讨了IDEA中设置项目编码格式的方法,以及如何处理序列化和反序列化问题。
67 1
java基础:IO流 理论与代码示例(详解、idea设置统一utf-8编码问题)
|
2月前
|
Java
lombok的使用
本文介绍了Lombok库的基本使用方法和常用注解,通过示例代码展示了如何使用Lombok简化Java对象的创建、属性访问、日志记录等编码工作,使代码更加简洁。
lombok的使用
|
2月前
|
存储 移动开发 Java
java核心之字符串与编码
java核心之字符串与编码
21 2
|
2月前
|
IDE Java 编译器
lombok编译遇到“找不到符号的问题”
【9月更文挑战第18天】当使用 Lombok 遇到 “找不到符号” 的问题时,可能是由于 Lombok 未正确安装、编译器不支持、IDE 配置不当或项目构建工具配置错误。解决方法包括确认 Lombok 安装、编译器支持,配置 IDE 和检查构建工具配置。通过这些步骤通常可解决问题,若问题仍存在,建议检查项目配置和依赖,或查看日志获取更多信息。
622 2
|
3月前
|
Java
Java系列之:字符串UTF-8 编码格式转换位 UTF-32 【生僻字截取问题】
这篇文章讨论了在Java中处理包含生僻字的字符串时可能遇到的问题,并提供了一种解决方法:将字符串的编码格式从UTF-8转换为UTF-32,以确保每个字符都占用固定的字节数,从而避免在截取操作中破坏字符,示例代码展示了如何进行编码转换和字符串截取。
|
3月前
|
存储 安全 Java
"Java编码魔法:揭秘图片与文件的Base64神秘转换术,让数据在指尖跳跃!"
【8月更文挑战第16天】Base64编码在Java开发中常用于将二进制数据如图片转换为ASCII字符串以便传输。编码使用64个字符及等号填充,每3字节数据编码为4个字符。Java利用`java.util.Base64`类实现此功能:读取图片或文件为字节数组后进行编码。解码时将Base64字符串还原为字节数组并写入文件。需注意编码效率降低、不提供安全性及特殊字符兼容性等问题。掌握这些技巧有助于解决Web开发中的数据传输需求。
95 4