Lombok 提供了一系列“神级”用法,即那些能够极大地简化代码、提升开发效率、降低错误率并保持代码整洁的特性。以下列举了一些具有代表性的神级用法及其示例代码:
-
@Data
: 一键生成所有必要的基础方法(getter、setter、equals、hashCode、toString 和无参构造器)。适用于简单数据模型类。@Data public class Person { private String firstName; private String lastName; private int age; }
上述代码等同于手动编写了所有的 getter、setter、
equals()
,hashCode()
和toString()
方法,以及一个无参构造器。 -
@Value
: 与@Data
类似,但创建的是不可变对象。所有属性默认为final
,且只有全参构造器。适用于需要保证对象状态不可变的情况。@Value public class ImmutablePerson { private final String firstName; private final String lastName; private final int age; }
这里不仅生成了必要的方法,还确保了对象一旦创建就不能再修改其属性值。
-
@Builder
: 提供了一个链式构建器模式,便于创建复杂的对象实例,尤其是当类有多个参数且部分参数可能为null
时。@Data @Builder public class Address { private String street; private String city; private String state; private String zipCode; } // 使用方式 Address address = Address.builder() .street("123 Main St") .city("Anytown") .state("CA") .zipCode("12345") .build();
无需手动编写构建器类,直接通过注解创建了易于使用的构建器API。
-
@AllArgsConstructor
/@NoArgsConstructor
/@RequiredArgsConstructor
: 分别生成包含所有字段的构造器、无参构造器和仅包含 final 或 @NonNull 字段的构造器。@Data @AllArgsConstructor // 全参构造器 @NoArgsConstructor // 无参构造器 public class Order { private long id; @NonNull private String item; @NonNull private int quantity; }
根据需要选择合适的构造器注解,简化了构造函数的编写。
-
@SneakyThrows
: 非常方便地隐藏受检异常(Checked Exception),避免大量 try-catch 代码块。@SneakyThrows(IOException.class) public void readFromFile(String path) { BufferedReader reader = new BufferedReader(new FileReader(path)); String line; while ((line = reader.readLine()) != null) { System.out.println(line); } }
在此示例中,
readFromFile()
方法不再需要显式捕获或声明IOException
。 -
@Wither
: 生成带有返回新对象的 setter 方法(也称为“with”方法),适合于不可变对象或链式调用。@Value public class Point { int x; int y; @Wither public Point withX(int newX) { return new Point(newX, y); } @Wither public Point withY(int newY) { return new Point(x, newY); } } // 使用方式 Point p = new Point(1, 2).withX(3).withY(4);
通过
with
方法可以创建新对象并更改单个属性,而不会改变原始对象。 -
@Log
/@Slf4j
/@CommonsLog
等日志注解: 自动为类添加日志记录器实例,无需手动初始化。@Slf4j public class LoggingService { public void processRequest(Request request) { log.info("Processing request: {}", request.getId()); // ... } }
类中可以直接使用日志记录器,无需显式创建
Logger
实例。
以上这些用法展示了 Lombok 如何通过注解极大地简化 Java 编程,减少样板代码,提升代码可读性和开发效率。实际使用时可以根据项目需求选择合适的注解组合。