好用的Lombok注解

配置

Lombok 的配置非常简单。Lombok 提供了 Maven 和 Gradle 的依赖项,你可以根据需要选择使用。

Maven:

在你的pom.xml中添加以下依赖:

xml 复制代码
<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>1.18.34</version>
    <scope>provided</scope>
</dependency>

Gradle:

在你的build.gradle中添加以下依赖:

arduino 复制代码
dependencies {
    compileOnly 'org.projectlombok:lombok:1.18.34'
    annotationProcessor 'org.projectlombok:lombok:1.18.34'
}

@Builder

建造者模式是开发中非常常见的设计模式。它允许我们逐步构建对象,并对其配置进行细粒度控制,同时保持构造代码的简洁。

在没有 Lombok 的情况下,代码通常如下所示:

typescript 复制代码
public class Order {
    privatefinal String customerName;
    privatefinal Address deliveryAddress;

    private Order(String customerName, Address deliveryAddress) {
        this.customerName = customerName;
        this.deliveryAddress = deliveryAddress;
    }

    public static OrderBuilder builder() {
        returnnew OrderBuilder();
    }

    publicstaticclass OrderBuilder {
        private String customerName;
        private Address deliveryAddress;

        OrderBuilder(){};

        public Builder customerName(String name) {
            this.customerName = name;
            returnthis;
        }

        public Builder deliveryAddress(Address address) {
            this.deliveryAddress = address;
            returnthis;
        }

        public Order build() {
            returnnew Order(customerName, deliveryAddress);
        }
    }
}

使用 Lombok 的实现:

kotlin 复制代码
@Builder
public class Order {
    private final String customerName;
    private final Address deliveryAddress;
}

这是一个非常简单的例子,但实际上还有很多其他注解可以定制建造者设计模式。我将在下一篇文章中介绍它们。

@Data

这个注解将一些常见的 Lombok 注解结合在一起:

  • @ToString

  • @Getter

  • @Setter

  • @EqualsAndHashCode

  • @RequiredArgsConstructor

没有 Lombok 的示例:

typescript 复制代码
public class UserInfo {
    private String username;
    private String password;
    private String email;

    public UserInfo(String username, String password, String email) {
        this.username = username;
        this.password = password;
        this.email = email;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    @Override
    public boolean equals(Object o) {
        // 一些实现
    }

    @Override
    public int hashCode() {
        return Objects.hash(username, password, email);
    }

    @Override
    public String toString() {
        return"UserInfo(" +
                "username='" + username + '\'' +
                ", password='" + password + '\'' +
                ", email='" + email + '\'' +
                ')';
    }
}

使用 Lombok 的实现:

typescript 复制代码
@Data
public class UserInfo {
    private String username;
    private String password;
    private String email;
}

@Value

如果我们希望所有字段默认都是私有的且不可变的(没有 setter 方法),可以使用@Value 注解,如下所示:

typescript 复制代码
@Value
public class UserInfo {
    private String username;
    private String password;
    private String email;
}

@NonNull

这个注解用于为任何方法或构造函数参数生成空值检查语句。

less 复制代码
public void setEmail(@NonNull String email) {
    this.email = email;
}

如果你喜欢这篇文章,请关注我。

相关推荐
Tsuki_tl9 小时前
【总结】Redis五大数据类型应用场景及基本命令
数据库·redis·后端·缓存·缓存中间件·redis命令·redis 五大数据类型
后台模板学习9 小时前
Go Web开发中任务调度框架的源码解析与高可用实现方案
开发语言·后端·golang
系统集成-鹰翔9 小时前
ERP对接升级提示数据库迁移失败:SQLite逐版本事务到底回滚到哪一步
javascript·数据库·经验分享·后端
西瓜拿铁好喝9 小时前
开源和闭源 AI 办公工具,分别适合谁
java·前端·数据库
IT_陈寒9 小时前
深入理解SpringBoot:核心原理与最佳实践
前端·人工智能·后端
学长毕设9 小时前
基于SpringBoot的校园礼服租赁系统的设计与实现
java·spring boot·后端
明天也要努力学习9 小时前
深入理解 JVM 垃圾回收(GC)
java·jvm
golang学习记9 小时前
IDEA 断点调试技巧:拖拽
java·ide·intellij-idea
Sayai10 小时前
Flink 日志解析任务性能优化实战:正则/Grok 预编译、Guava 缓存权重陷阱与 ES 写入隔离
java·大数据·性能优化·flink·实时计算
计算机毕设定制辅导-无忧学长10 小时前
《基于物品协同过滤的闲置书换购微信小程序设计开发》
java·vue.js·spring boot·微信小程序·uniapp·闲置书换购微信小程序·物品协同过滤算法