Lombok 常用注解详解
1. 概述
Lombok 是一个 Java 库,它通过注解的方式帮助开发者减少样板代码(boilerplate code)的编写。通过使用 Lombok,开发者可以简化 getter、setter、构造函数等方法的编写,从而提高开发效率。
2. 常用注解
2.1 @Getter
和 @Setter
-
作用:自动生成类的 getter 和 setter 方法。
-
使用示例:
import lombok.Getter; import lombok.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.2 @ToString
-
作用:自动生成
toString
方法。 -
使用示例:
import lombok.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 + ")"; } }
2.3 @EqualsAndHashCode
-
作用:自动生成
equals
和hashCode
方法。 -
使用示例:
import lombok.EqualsAndHashCode; @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); } }
2.4 @NoArgsConstructor
, @AllArgsConstructor
, @RequiredArgsConstructor
-
作用:自动生成构造函数。
-
使用示例:
import lombok.NoArgsConstructor; import lombok.AllArgsConstructor; import lombok.RequiredArgsConstructor; @NoArgsConstructor @AllArgsConstructor @RequiredArgsConstructor public class User { private String name; private final int age; }
生成的代码:
public class User { private String name; private final int age; public User() { } public User(String name, int age) { this.name = name; this.age = age; } public User(int age) { this.age = age; } }
@NoArgsConstructor:生成一个无参数的构造函数。
@AllArgsConstructor:生成一个包含所有字段的构造函数。
@RequiredArgsConstructor:生成一个包含所有 final 字段和 @NonNull 注解字段的构造函数。
2.5 @Data
-
作用:组合注解,包含
@Getter
,@Setter
,@ToString
,@EqualsAndHashCode
,@RequiredArgsConstructor
。 -
使用示例:
import lombok.Data; @Data 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; } @Override public String toString() { return "User(name=" + name + ", age=" + 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); } public User(int age) { this.age = age; } }
2.6 @Builder
-
作用:自动生成建造者模式的代码。
-
使用示例:
import lombok.Builder; @Builder public class User { private String name; private int age; }
生成的代码:
public class User { private String name; private int age; User(String name, int age) { this.name = name; this.age = age; } public static UserBuilder builder() { return new UserBuilder(); } public static class UserBuilder { private String name; private int age; UserBuilder() { } public UserBuilder name(String name) { this.name = name; return this; } public UserBuilder age(int age) { this.age = age; return this; } public User build() { return new User(name, age); } @Override public String toString() { return "UserBuilder(name=" + name + ", age=" + age + ")"; } } }
3. 总结
Lombok 通过注解的方式极大地简化了 Java 代码的编写,特别是对于 getter、setter、构造函数等样板代码的生成。通过使用 @Getter
, @Setter
, @ToString
, @EqualsAndHashCode
, @NoArgsConstructor
, @AllArgsConstructor
, @RequiredArgsConstructor
, @Data
, @Builder
等注解,开发者可以显著提高开发效率,减少代码冗余。希望这个教程能帮助你更好地理解和掌握 Lombok 的常用注解。