Lombok.Data:用于简化 Java 类的开发

一、简介

Lombok 是一个开源的 Java 库,可以自动化生成 Java 类的 getter、setter、equals、hashCode 等常用方法,减少了编写样板式代码的工作量,提高开发效率。Lombok.Data 是 Lombok 中的一个注解,可以自动在类上生成 getter、setter、equals、hashCode 和 toString 方法。

二、@Data 注解的使用

要使用 Lombok.Data 需要在 pom.xml 文件中添加以下依赖:

{@code

    org.projectlombok
    lombok
    1.18.16
    provided

}

在 Java 类上添加 @Data 注解即可自动生成 getter、setter、equals、hashCode 和 toString 方法。

{@code
import lombok.Data;

@Data
public class User {
    private int id;
    private String name;
}
}

以上代码会自动生成以下方法:

{@code
public int getId() {
    return id;
}

public void setId(int id) {
    this.id = id;
}

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

@Override
public boolean equals(Object o) {
    if (this == o) return true;
    if (o == null || getClass() != o.getClass()) return false;
    User user = (User) o;
    return id == user.id &&
            Objects.equals(name, user.name);
}

@Override
public int hashCode() {
    return Objects.hash(id, name);
}

@Override
public String toString() {
    return "User{" +
            "id=" + id +
            ", name='" + name + '\'' +
            '}';
}
}

三、@Data 注解的特点

1. 链式调用

通过在属性上使用 @Setter 和 @Accessors 注解,可以实现链式调用。使用 @Setter(chain = true) 开启链式调用,@Accessors(chain = true) 控制链式调用的相关行为。

{@code
import lombok.Data;
import lombok.experimental.Accessors;

@Data
@Accessors(chain = true)
public class User {
    private int id;
    private String name;
}

// 使用
User user = new User().setId(1).setName("Tom");
}

2. 默认构造函数

在类上添加 @Data 注解,就会默认生成一个无参构造函数。

{@code
@Data
public class User {
    private int id;
    private String name;

    public User(){}
}
}

3. 全参构造函数

在类上添加 @AllArgsConstructor 注解,就会自动生成一个包含所有参数的构造函数。

{@code
@Data
@AllArgsConstructor
public class User {
    private int id;
    private String name;
}
}

4. 静态方法

在类上添加 @Data(staticConstructor = “of”) 注解,就会自动生成一个以参数为输入的静态工厂方法。此方法的名称可以在注解中指定。

{@code
@Data(staticConstructor = "of")
public class User {
    private int id;
    private String name;
}

// 使用
User user = User.of(1, "Tom");
}

四、@Data 注解的局限性

虽然 @Data 注解可以大大减少样板代码,但是也有它的局限性。下面是几个 @Data 注解的局限性:

1. 不能控制生成方法的可见性

@Data 注解会将所有属性的访问级别设置为 public,不能控制生成方法的可见性。

{@code
@Data
public class User {
    private int id;
    private String name;
}

// 生成结果如下(getter 和 setter 方法都是 public 的):
public int getId() {...}
public void setId(int id) {...}
public String getName() {...}
public void setName(String name) {...}
}

2. 相同名称的属性会出现名称冲突问题

如果有两个属性的名称相同,@Data 注解会将它们的 getter 和 setter 方法的名称都设置为相同的名称,会出现名称冲突问题。

{@code
@Data
public class User {
    private int id;
    private String name;
    private String email;
}

// 生成结果如下(name 的 getter 和 setter 方法和 email 的 getter 和 setter 方法名字是相同的):
public String getName() {...}
public void setName(String name) {...}
public String getEmail() {...}
public void setEmail(String email) {...}
}

3. 不能自定义 equals 和 hashCode 方法的具体实现

@Data 注解生成的 equals 和 hashCode 方法是基于所有属性的默认实现,不能自定义它们的具体实现。

五、总结

Lombok.Data 可以大大减少样板代码的编写,提高开发效率。但是它也有它的局限性,需要根据具体情况进行选择。在实际开发中,可以根据具体需要使用 Lombok 的其他注解来解决上述问题。例如 @Getter、@Setter、@ToString、@EqualsAndHashCode 等。

原创文章,作者:AZKDE,如若转载,请注明出处:https://www.506064.com/n/368138.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
AZKDEAZKDE
上一篇 2025-04-12 01:12
下一篇 2025-04-12 01:13

相关推荐

  • Java JsonPath 效率优化指南

    本篇文章将深入探讨Java JsonPath的效率问题,并提供一些优化方案。 一、JsonPath 简介 JsonPath是一个可用于从JSON数据中获取信息的库。它提供了一种DS…

    编程 2025-04-29
  • java client.getacsresponse 编译报错解决方法

    java client.getacsresponse 编译报错是Java编程过程中常见的错误,常见的原因是代码的语法错误、类库依赖问题和编译环境的配置问题。下面将从多个方面进行分析…

    编程 2025-04-29
  • Java腾讯云音视频对接

    本文旨在从多个方面详细阐述Java腾讯云音视频对接,提供完整的代码示例。 一、腾讯云音视频介绍 腾讯云音视频服务(Cloud Tencent Real-Time Communica…

    编程 2025-04-29
  • Java Bean加载过程

    Java Bean加载过程涉及到类加载器、反射机制和Java虚拟机的执行过程。在本文中,将从这三个方面详细阐述Java Bean加载的过程。 一、类加载器 类加载器是Java虚拟机…

    编程 2025-04-29
  • Java Milvus SearchParam withoutFields用法介绍

    本文将详细介绍Java Milvus SearchParam withoutFields的相关知识和用法。 一、什么是Java Milvus SearchParam without…

    编程 2025-04-29
  • Java 8中某一周的周一

    Java 8是Java语言中的一个版本,于2014年3月18日发布。本文将从多个方面对Java 8中某一周的周一进行详细的阐述。 一、数组处理 Java 8新特性之一是Stream…

    编程 2025-04-29
  • Java判断字符串是否存在多个

    本文将从以下几个方面详细阐述如何使用Java判断一个字符串中是否存在多个指定字符: 一、字符串遍历 字符串是Java编程中非常重要的一种数据类型。要判断字符串中是否存在多个指定字符…

    编程 2025-04-29
  • VSCode为什么无法运行Java

    解答:VSCode无法运行Java是因为默认情况下,VSCode并没有集成Java运行环境,需要手动添加Java运行环境或安装相关插件才能实现Java代码的编写、调试和运行。 一、…

    编程 2025-04-29
  • Java任务下发回滚系统的设计与实现

    本文将介绍一个Java任务下发回滚系统的设计与实现。该系统可以用于执行复杂的任务,包括可回滚的任务,及时恢复任务失败前的状态。系统使用Java语言进行开发,可以支持多种类型的任务。…

    编程 2025-04-29
  • Java 8 Group By 会影响排序吗?

    是的,Java 8中的Group By会对排序产生影响。本文将从多个方面探讨Group By对排序的影响。 一、Group By的概述 Group By是SQL中的一种常见操作,它…

    编程 2025-04-29

发表回复

登录后才能评论