Lombok 实战教程 - @Getter 和 @Setter | 如何优雅的进行对象的getter和setter操作

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 会为 nameage 字段自动生成 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

  1. 添加 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'
    }
    
  2. 在 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 注解和自定义逻辑,可以满足各种复杂的需求。

  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值