第一天
Lombok 的 @Builder
注解是一种方便地实现建造者模式(Builder Pattern)的方式。Builder 模式通常用于创建复杂的对象,通过链式调用来设置对象的属性,最后通过调用 build 方法来构建对象。
@Builder
注解
-
生成 Builder 类:
-
当你在一个类上使用
@Builder
注解时,Lombok 会自动生成一个静态内部 Builder 类。这个 Builder 类有与原始类相同的字段,并通过链式调用方法来设置这些字段的值。
-
-
链式调用:
-
使用
@Builder
注解后,Lombok 会生成一个具有与类字段相同名称的静态内部 Builder 类。这个 Builder 类包含了用于设置类字段值的方法,这些方法支持链式调用。例如,对于属性name
,Builder 类将生成一个name(String name)
方法,并返回 Builder 自身,使得可以连续调用多个方法来设置属性。
-
-
构建对象:
-
Builder 类中会有一个
build()
方法,用于构建最终的对象。在链式调用设置完所有属性之后,调用build()
方法即可返回一个使用设置好的属性值构建的原始类对象。
-
@Getter @Builder public class Person { private String name; private int age; private String address; } // 使用示例 public class Main { public static void main(String[] args) { // 使用 Builder 构建对象 Person person = Person.builder() .name("Alice") .age(30) .address("123 Main St") .build(); // 打印对象信息 System.out.println(person.getName()); System.out.println(person.getAge()); System.out.println(person.getAddress()); } }
@Cleanup
注解
Lombok 中的 @Cleanup
注解主要用于简化代码中资源的清理工作,特别是在使用需要手动关闭的资源(如流或连接)时,可以帮助自动化资源的关闭操作,避免手动编写 finally
块来释放资源。
具体来说,@Cleanup
注解可以应用在局部变量上,例如一个输入流或输出流,当该变量离开作用域时,Lombok 会自动生成一个 try-finally
块,确保资源在使用完毕后被正确关闭。
以下是 @Cleanup
注解的一些关键点和用法:
public class Test { /** * 状态 * true : 打开 * false : 关闭 */ private boolean status; public Test() { this.status = true; System.out.println("初始化,状态: "+this.status); } public void operation() { System.out.println("业务操作..."); } public void close() { this.status = false; System.out.println("关闭,状态: "+this.status); } //main方法测试 public static void main(String[] args) { @Cleanup Test test = new Test(); test.operation(); //其他的业务 System.out.println("A业务处理..."); } }
@SneakyThrows注解
@SneakyThrows注解是由lombok封装的,为代码生成一个try…catch块,并把异常向上抛出来
使用范围: 只能作用在方法和构造函数之上。
而java中常见的异常有两种:
Exception即非运行时异常(编译异常)。
RuntimeException即运行时异常。
然而程序员大部分情况下,处理Exception的常见手段就是外面包一层RuntimeException,接着往上抛(throws Exception)。
-
隐藏异常声明:使用
@SneakyThrows
注解可以在方法内部抛出 checked exception 而无需在方法签名上声明该异常,从而避免了方法声明中的异常列表过度膨胀。 -
简化异常处理:适用于那些在方法内部可能抛出异常但又不想在方法外部显式处理该异常的情况,可以简化代码结构和提高可读性。
-
编译时代码生成:Lombok 在编译时会生成相应的 try-catch 块来捕获受检异常,并把它转换为非受检异常(unchecked exception)抛出,从而避免编译错误。
import lombok.SneakyThrows; public class Example { @SneakyThrows public void readFile(String filePath) { // 读取文件的代码,如果发生 IOException,则会被转换为 RuntimeException 抛出 // 无需显式地在方法签名中声明 throws IOException } }