Lombok 的 @Getter
和 @Setter
注解可以帮助我们自动生成类的 getter 和 setter 方法,从而减少样板代码,使代码更简洁和可读。以下是关于如何使用 @Getter
和 @Setter
注解的详细说明和实战示例。
@Getter
和 @Setter
的基本使用
单独使用 @Getter
和 @Setter
示例:
import lombok.Getter;
import lombok.Setter;
public class Person {
@Getter @Setter
private String name;
@Getter @Setter
private int age;
}
在这个例子中,Lombok 会为 name
和 age
字段自动生成 getter 和 setter 方法。
等价于:
public class Person {
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;
}
}
在类级别使用 @Getter
和 @Setter
你也可以在类级别使用这些注解,这样类中所有的字段都会有 getter 和 setter 方法。
示例:
import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
public class Person {
private String name;
private int age;
}
等价于:
public class Person {
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;
}
}
自定义访问级别
你可以通过设置 AccessLevel
来自定义生成的 getter 和 setter 方法的访问级别。
示例:
import lombok.Getter;
import lombok.Setter;
import lombok.AccessLevel;
public class Person {
@Getter(AccessLevel.PUBLIC)
@Setter(AccessLevel.PROTECTED)
private String name;
@Getter(AccessLevel.NONE)
@Setter(AccessLevel.NONE)
private int age;
}
在这个例子中,name
字段的 getter 方法是 public 的,而 setter 方法是 protected 的。age
字段没有生成 getter 和 setter 方法。
安装和配置 Lombok
-
添加 Lombok 依赖:在你的项目中添加 Lombok 依赖(例如使用 Maven 或 Gradle)。
Maven:
<dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.20</version> <scope>provided</scope> </dependency>
Gradle:
dependencies { compileOnly 'org.projectlombok:lombok:1.18.20' annotationProcessor 'org.projectlombok:lombok:1.18.20' }
-
在 IDE 中启用 Lombok 支持:
- IntelliJ IDEA:安装 Lombok 插件,并在设置中启用注解处理。
- Eclipse:安装 Lombok 插件,并在设置中启用注解处理。
结合实际案例
假设我们有一个简单的用户管理系统,需要对用户对象的属性进行访问和修改。
传统 Java 代码:
public class User {
private String username;
private String email;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
}
使用 Lombok 的代码:
import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
public class User {
private String username;
private String email;
}
在这个例子中,使用 Lombok 的 @Getter
和 @Setter
注解能够有效减少样板代码,使类定义更加简洁。
进一步增强
Lombok 的 @Getter
和 @Setter
注解还可以结合其他注解使用,以满足更复杂的需求。
只读属性
如果某个属性是只读的,可以仅使用 @Getter
注解。
示例:
import lombok.Getter;
public class ReadOnlyUser {
@Getter
private final String username;
public ReadOnlyUser(String username) {
this.username = username;
}
}
在这个例子中,username
属性是只读的,只生成 getter 方法。
带有逻辑的 Setter 方法
如果需要在 setter 方法中添加逻辑,可以手动定义 setter 方法,同时使用 @Getter
自动生成 getter 方法。
示例:
import lombok.Getter;
public class CustomSetterUser {
@Getter
private String username;
public void setUsername(String username) {
if (username == null || username.isEmpty()) {
throw new IllegalArgumentException("Username cannot be null or empty");
}
this.username = username;
}
}
在这个例子中,我们手动定义了带有逻辑的 setter 方法,同时使用 @Getter
注解自动生成 getter 方法。
通过使用 Lombok 的 @Getter
和 @Setter
注解,我们可以大大简化 Java 类中的样板代码,使代码更加简洁和易于维护。结合其他 Lombok 注解和自定义逻辑,可以满足各种复杂的需求。