
Lombok
文章平均质量分 86
Lombok 使用教程
猫巳
2006年《时代周刊》年度人物
2008年“感动中国年度人物”特别奖获得者
2019年度“地球卫士奖”联合获奖人
2020年感动中国特别致敬奖——抗疫英雄
2022年”奥林匹克奖杯“获奖者
展开
-
【Lombok】Lombok 使用教程大全
文章目录一、简介二、常用注解一、简介Project Lombok是一个java库,可以自动插入编辑器和构建工具,提高java的性能。再也不用写另一个getter或equals方法了,只要一个注解,你的类就有一个功能齐全的构建器,自动记录变量,等等。官网地址:https://projectlombok.org/二、常用注解【Lombok】val 和 var的使用 | 像 JavaScript 一样的去声明变量【Lombok】@NonNull | 如何优雅的处理字段 NullPointerExce原创 2021-12-08 13:37:11 · 2110 阅读 · 17 评论 -
【Lombok】@FieldNameConstants | 为你的字段生成一个以字段名称为值的常量
`@FieldNameConstants`注解生成了一个内部类型,它为你的类中的每个字段包含一个常量;或者是字符串常量(字段标记为`public static final`,类型为`java.lang.String`),或者如果你愿意,一个枚举类型,每个字段有一个值--为枚举变体编写`@FieldNameConstants(asEnum = true)`。`@FieldNameConstants`对于各种调度和序列化框架很有用。常量字段(无论是枚举值还是字符串常量)的名字总是和字段一模一样的。。。原创 2021-12-29 14:28:41 · 7941 阅读 · 0 评论 -
【Lombok】@Helper | 让你可以在方法内部中写方法
这个注解让你把方法放在方法中。你可能不知道,但是你可以在方法中声明类,并且这个类中的方法可以访问任何在声明前定义和设置的(有效的)最终局部变量或参数。不幸的是,要真正调用任何方法,你必须先建立一个这个方法局部类的实例,但这就是`@Helper`的作用,它可以帮助你解决这个问题! 用`@Helper`来注解一个方法局部类,就好像该帮助类中的所有方法都是你可以直接调用的方法,就像`java`允许方法存在于方法内部一样。原创 2021-12-29 14:12:43 · 725 阅读 · 0 评论 -
【Lombok】@UtilityClass | 针对实用工具类的注解
一个实用工具类是一个只是函数命名空间的类。它的实例不可能存在,而且它的所有成员都是静态的。例如,`java.lang.Math`和`java.util.Collections`是著名的实用工具类。这个注解会自动将被注解的类变成一个这样的类。一个实用工具类不能被实例化。通过用`@UtilityClass`标记你的类,`lombok`会自动生成一个抛出异常的私有构造函数,将你添加的任何显式构造函数标记为错误,并将该类标记为`final`。如果该类是一个内部类,该类也被标记为`static`。原创 2021-12-29 13:54:51 · 14851 阅读 · 0 评论 -
【Lombok】onX | 为Lombok注解添加自定义注解
这个功能被认为是 "变通状态"--它的存在是为了让那些没有这个功能就无法工作的`lombok`用户无论如何都能使用这个功能。如果我们找到一个更好的方法来实现这个功能,或者未来的某个java版本引入了一个替代策略,这个功能可以在没有一个合理的废弃期的情况下消失。另外,这个功能可能在未来的javac版本中无法使用。使用时请自行斟酌。大多数使`lombok`生成方法或构造函数的注解可以被配置为使`lombok`在生成的代码中的元素上添加自定义注解。原创 2021-12-29 13:44:07 · 1828 阅读 · 0 评论 -
【Lombok】@Delegate | 将其他类方法注入到当前类
任何字段或无参数方法都可以用`@Delegate`来注解,让`lombok`生成转发对这个字段的调用(或调用这个方法的结果)的委托方法。`Lombok`委托该字段类型(或方法的返回类型)的所有公共方法,以及其父类型的方法,但所有以`java.lang.Object`声明的方法除外。你可以在`@Delegate`注解的类型参数中传递任意数量的类。如果你这样做,那么`lombok`将委托这些类型(以及它们的父类型,除了`java.lang.Object`)中的所有公共方法,而不是看字段/方法的类型。原创 2021-12-29 13:28:13 · 6965 阅读 · 0 评论 -
【Lombok】@FieldDefaults | 通过Lombok设置字段默认值
`@FieldDefaults`注解可以为被注解的类或枚举中的每个字段添加访问修饰符(`public`, `private`, 或 `protected`)。它还可以为注释的类或枚举中的每个字段添加`final`。要给每个(实例)字段添加`final`,使用`@FieldDefaults(makeFinal=true)`。任何必须保持非`final`的字段可以用`@NonFinal`(也在`lombok.experimental`包中)来注释。原创 2021-12-24 11:02:06 · 13010 阅读 · 21 评论 -
【Lombok】@ExtensionMethod | 向现有类型中添加方法
你可以制作一个包含一堆`public`, `static`方法的类,这些方法都至少有一个参数。这些方法将扩展第一个参数的类型,就像它们是实例方法一样,使用`@ExtensionMethod`特性。例如,如果你创建了 `public static String toTitleCase(String in) { ... }`,你可以使用`@ExtensionMethod`特性,让它看起来像`java.lang.String`类有一个名为`toTitleCase`的方法,它没有参数。原创 2021-12-22 17:19:01 · 2864 阅读 · 8 评论 -
【Lombok】@Accessors | 自定义getters和setters的生成格式
默认情况下,`lombok`遵循`bean`规范的`getter`和`setter`。例如,一个名为`pepper`的字段的`getter`是`getPepper`。然而,有些人可能想打破`Bean`的规范,以便最终得到更漂亮的`API`。`@Accessors`让你做到这一点。有些程序员喜欢为他们的字段使用前缀,例如他们写`fPepper`而不是`pepper`。我们强烈反对这样做,因为你无法对前缀的有效性进行单元测试,而且重构脚本可能会把字段变成局部变量或方法名称。原创 2021-12-21 11:57:06 · 2197 阅读 · 0 评论 -
【Lombok】@Log | 如何优雅的进行日志记录
文章目录一、简介二、示例比较1. Lombok 写法2. Java 标准写法三、支持的配置项四、附属说明参考文献一、简介在lombok v0.10中添加了各种@Log的变体。lombok 0.10中的新内容:你可以用log注解来注解任何类,让lombok生成一个logger字段。该logger被命名为log,字段的类型取决于你选择了哪一个logger。lombok v1.16.24中的新内容:增加了谷歌的FluentLogger(通过@Flogger)。lombok v1.18.10中的新功能:增原创 2021-12-16 13:51:56 · 11751 阅读 · 11 评论 -
【Lombok】@Getter(lazy=true) | Getter 懒加载
文章目录一、简介二、示例比较1. Lombok 写法2. Java 标准写法三、支持的配置项四、附属说明参考文献一、简介@Getter(lazy=true)是在Lombok v0.10中引入的。你可以让lombok生成一个getter,它将在第一次调用这个getter时计算一个值,并从那时起缓存它。如果计算数值需要大量的CPU,或者数值需要大量的内存,这就很有用。要使用这个功能,创建一个private final变量,用运行成本高的表达式来初始化它,并用@Getter(lazy=true)来注释你的字原创 2021-12-16 13:23:08 · 1691 阅读 · 0 评论 -
【Lombok】@With | 通过重新构造对象修改不可变属性
文章目录一、简介二、示例比较1. Lombok 写法2. Java 标准写法三、支持的配置项四、附属说明参考文献一、简介@Wither是在lombok v0.11.4中作为实验性功能引入的。在lombok v1.18.10中,@Wither被改名为@With,并从实验包中移出,进入核心包。对于一个不可变的属性来说,替代setter的第二种方法是构造一个对象的克隆,但这个字段有一个新值。产生这种克隆的方法正是@With所产生的:一个withFieldName(newValue)方法,它产生一个除了相关原创 2021-12-16 11:24:42 · 1251 阅读 · 0 评论 -
【Lombok】@Synchronized | 如何优雅的添加Synchronized锁
文章目录一、简介二、示例比较1. Lombok 写法2. Java 标准写法三、支持的配置项四、附属说明参考文献一、简介@Synchronized是synchronized方法修饰语的一个更安全的变体。和synchronized一样,该注解只能用于静态和实例方法。它的操作与synchronized关键字类似,但它锁定的对象不同。关键字锁定了这个对象,但注解锁定了一个名为$lock的字段,它是私有的。如果你愿意,你可以自己创建这些锁。如果你已经自己创建了$lock和$LOCK字段,当然就不会再生成它们。原创 2021-12-16 10:22:43 · 2321 阅读 · 0 评论 -
【Lombok】@SneakyThrows | 如何优雅的抛出异常
一、简介@SkillyThrows可用于偷偷抛出已检查的异常,而无需在方法的throws子句中实际声明。当然,这种有点争议的能力应该谨慎使用。lombok生成的代码不会忽略、包装、替换或以其他方式修改抛出的选中异常;它只是伪造了编译器。在JVM(类文件)级别上,不管方法的throws子句如何,都可以抛出所有异常(无论是否检查),这就是为什么这样做的原因。当您想要选择退出已检查异常机制时,常见用例主要用两种情况:一个不必要的严格的接口,比如Runnable–无论你的run()方法中传播出什么异常,无论原创 2021-12-13 10:54:49 · 7351 阅读 · 0 评论 -
【Lombok】@Builder | 提供 Builder 形式轻松实现对象创建
文章目录一、简介@Builder.Default@SingularJackson二、示例比较1. Lombok 写法2. Java 标准写法三、支持的配置项四、附属说明参考文献一、简介在lombok v0.12.0中,@Builder被作为实验性功能引入。@Builder获得了@Singular的支持,并从lombok v1.16.0开始晋升为lombok主包。在lombok v1.16.16中增加了@Builder.Default功能。@Builder(builderMethodName = "原创 2021-12-09 17:03:49 · 4584 阅读 · 1 评论 -
【Lombok】@Value | 轻松实现不可变类
文章目录一、简介二、示例比较1. Lombok 写法2. Java 标准写法三、支持的配置项四、附属说明参考文献一、简介在lombok v0.11.4中,@Value被作为实验性功能引入。自lombok v0.11.8以来,@Value不再意味着@With。自lombok v0.12.0以来,@Value被提升为lombok主包。@Value是@Data的不可更改变体;默认情况下,所有字段都是private和final的,并且不会生成setter。默认情况下,类本身也是final的,因为不可变性不原创 2021-12-09 15:16:55 · 1175 阅读 · 0 评论 -
【Lombok】@Data | 整合 @ToString, @EqualsAndHashCode, @Getter,@Setter 和 @RequiredArgsConstructor
一、简介@Data是一个方便的快捷注解,它将@ToString、@EqualsAndHashCode、@Getter/@Setter和@RequiredArgsConstructor的功能捆绑在一起。换句话说,@Data生成了所有通常与简单POJO(Plain Old Java Objects)和Bean相关的模板:所有字段的getters,所有非final字段的setters,以及适当的toString、equals和hashCode实现,这些都涉及到类的字段,还有一个初始化所有final字段的构造函数原创 2021-12-08 16:49:06 · 3785 阅读 · 0 评论 -
【Lombok】@NoArgsConstructor, @RequiredArgsConstructor, @AllArgsConstructor | 自动生成类的构造函数
文章目录一、简介二、示例比较1. Lombok 写法2. Java 标准写法三、支持的配置项四、附属说明参考文献一、简介这组3个注释生成一个构造函数,该构造函数将为某些字段接受1个参数,并将该参数简单地分配给该字段。@NoArgsConstructor将生成一个没有参数的构造函数。如果这是不可能的(因为有final字段),将产生一个编译器错误,除非使用@NoArgsConstructor(force = true),那么所有最终字段将被初始化为0 / false / null。对于有约束条件的字段,如原创 2021-12-08 16:22:49 · 4360 阅读 · 0 评论 -
【Lombok】@EqualsAndHashCode | 自动生成类的 Equals 和 HashCode 方法
文章目录一、简介二、示例比较1. Lombok 写法2. Java 标准写法三、支持的配置项四、附属说明参考文献一、简介任何类的定义都可以用@EqualsAndHashCode来注释,让lombok生成equals(Object other)和hashCode()方法的实现。默认情况下,它将使用所有非静态、非瞬时的字段,但是你可以通过用@EqualsAndHashCode.Include或@EqualsAndHashCode.Exclude标记类型成员来修改哪些字段被使用(甚至指定各种方法的输出被使用)原创 2021-12-08 15:57:20 · 3384 阅读 · 1 评论 -
【Lombok】@ToString | 自动生成类的 ToString 方法
文章目录一、简介二、示例比较1. Lombok 写法2. Java 标准写法三、支持的配置项四、附属说明参考文献一、简介任何类定义都可以用@ToString注释,以使lombok生成ToString()方法的实现。默认情况下,它将按顺序打印您的类名以及每个字段,并用逗号分隔。通过设置includeFieldNames参数为true,你可以为toString()方法的输出增加一些清晰度(但也有相当的长度)。默认情况下,所有非静态字段将被打印。如果你想跳过某些字段,你可以用@ToString.Exclu原创 2021-12-08 15:23:02 · 8825 阅读 · 0 评论 -
【Lombok】@Getter 和 @Setter | 如何优雅的进行对象的getter和setter操作
文章目录一、简介二、示例比较1. Lombok 写法2. Java 标准写法三、支持的配置项四、附属说明参考文献一、简介你可以用@Getter和@Setter来注解任何字段,让lombok自动生成默认的getter/setter。如果字段名为foo,一个默认的getter则被命名为getFoo(如果字段的类型是布尔型,则被称为isFoo)。一个默认的setter被命名为setFoo,返回void,并且需要一个与字段类型相同的参数。它只是将字段设置为这个值。生成的getter/setter方法访问级别原创 2021-12-08 14:35:29 · 13371 阅读 · 0 评论 -
【Lombok】@Cleanup | 如何优雅的自动管理资源,安全地调用你的close()方法。
文章目录一、简介二、示例比较1. Lombok 写法2. Java 标准写法三、支持的配置项四、附属说明参考文献一、简介你可以使用@Cleanup来确保一个给定的资源在代码执行路径退出你的当前作用域之前被自动清理掉。你可以用@Cleanup注解对任何局部变量声明进行注解,像这样:@Cleanup InputStream in = new FileInputStream("some/file");因此,在所处范围的末尾,in.close()被调用。这个调用通过try/finally结构保证运行。请看原创 2021-12-08 13:55:37 · 976 阅读 · 1 评论 -
【Lombok】@NonNull | 如何优雅的处理字段 NullPointerException 异常
文章目录一、简介二、示例比较1. Lombok 写法2. Java 标准写法三、支持的配置项四、附属说明参考文献一、简介@NonNull在lombok v0.11.10中被引入。你可以在一个记录组件上使用@NonNull,或者一个方法或构造函数的参数。lombok将为你生成一个null检查语句。Lombok始终将字段上通常命名为@NonNull的各种注释视为一个信号,以便在Lombok为您生成整个方法或构造函数时生成null检查,例如通过@Data。但是,对参数或记录组件使用lombok自己的@lo原创 2021-12-08 13:36:16 · 3705 阅读 · 0 评论 -
【Lombok】val 和 var的使用 | 像 JavaScript 一样的去声明变量
文章目录一、简介1. val2. var3. 区别二、示例对比1. Lombok 写法2. Java 标准写法三、支持的配置项附属说明一、简介1. valval是在lombok 0.10中引入的。您可以使用val作为局部变量声明的类型,而不是实际编写该类型。执行此操作时,将从初始值设定项表达式推断类型。局部变量也将成为最终变量。此功能仅适用于局部变量和foreach循环,而不适用于字段。初始值设定项表达式是必需的。val实际上是一种排序的“类型”,在lombok包中作为一个真正的类存在。必须导入它原创 2021-12-08 13:06:21 · 3708 阅读 · 0 评论