Lombok
Lombok 是一个用于简化 Java 代码的库,主要通过注解自动生成样板代码,减少冗余代码的编写量。以下是一些常用 Lombok 注解的作用:
1. @Getter / @Setter vs 手写 Getter / Setter
@Getter 和 @Setter 让你不用手写 getXxx() 和 setXxx() 方法,比手写 getter/setter 更简洁。
@Getter
@Setter
public class User {
private String name;
private int age;
}等价于:
public class User {
private String name;
private int age;
public String getName() { return name; }
public void setName(String name) { this.name = name; }
public int getAge() { return age; }
public void setAge(int age) { this.age = age; }
}2. @ToString vs 手写 toString() 方法
@ToString 自动生成 toString() 方法,比自己手写 toString() 更方便。
@ToString
public class User {
private String name;
private int age;
}等价于:
public class User {
private String name;
private int age;
@Override
public String toString() {
return "User(name=" + name + ", age=" + age + ")";
}
}3. @EqualsAndHashCode vs 手写 equals() 和 hashCode()
@EqualsAndHashCode 生成 equals() 和 hashCode() 方法,比自己写更省力,避免遗漏字段。
@EqualsAndHashCode
public class User {
private String name;
private int age;
}等价于:
public class User {
private String name;
private int age;
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
User user = (User) o;
return age == user.age && Objects.equals(name, user.name);
}
@Override
public int hashCode() {
return Objects.hash(name, age);
}
}4. @NoArgsConstructor vs 手写无参构造
@NoArgsConstructor 生成无参构造方法,比手写无参构造更快捷。
@NoArgsConstructor
public class User {
private String name;
private int age;
}等价于:
public class User {
private String name;
private int age;
public User() {}
}5. @AllArgsConstructor vs 手写全参构造
@AllArgsConstructor 生成全参数构造方法,比手写更方便。
@AllArgsConstructor
public class User {
private String name;
private int age;
}等价于:
public class User {
private String name;
private int age;
public User(String name, int age) {
this.name = name;
this.age = age;
}
}6. @Data vs 组合多个注解
@Data 其实是 @Getter、@Setter、@ToString、@EqualsAndHashCode 和 @RequiredArgsConstructor 的综合体,比单独加多个注解更高效。
@Data
public class User {
private String name;
private int age;
}等价于多个注解的组合。
7. @Builder vs 传统构造器
@Builder 提供链式调用的方式创建对象,比传统构造方法更优雅。
@Builder
public class User {
private String name;
private int age;
}调用方式:
User user = User.builder()
.name("Alice")
.age(25)
.build();等价于手写 Builder 模式。
总结:Lombok 比手写代码更简洁、更高效、更易维护!
Last updated on