Java中的@Data是什么以及如何使用

 更新时间:2025年08月14日 09:19:57   作者:姜太公钓鲸233  
Data是Lombok 项目中的一个注解,Lombok 是一种 Java 库,它通过注解来简化代码的编写过程,使用 Lombok 可以帮助开发者减少样板代码,本文给大家介绍Java中的@Data是什么以及如何使用,感兴趣的朋友一起看看吧

@Data 是 Lombok 项目中的一个注解,Lombok 是一种 Java 库,它通过注解来简化代码的编写过程。使用 Lombok 可以帮助开发者减少样板代码(boilerplate code),比如 getter、setter 方法、构造函数、toString 方法等。

作用

  • 自动生成类中所有字段的 getter 和 setter 方法。
  • 自动生成 toString 方法。
  • 自动生成 equals 和 hashCode 方法。
  • 自动生成无参构造函数以及全参构造函数(如果需要)。

如何使用

首先需要在项目中引入 Lombok 依赖。对于 Maven 项目,可以在 pom.xml 文件中添加以下依赖:

<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>1.18.24</version> <!-- 请根据实际情况选择版本 -->
    <scope>provided</scope>
</dependency>

然后,在需要简化的 Java 类上添加 @Data 注解:

import lombok.Data;
@Data
public class User {
    private Long id;
    private String name;
}

这样就无需手动为 User 类编写 getter、setter、toString 等方法了。

使用场景

  • 当你需要快速创建实体类或数据传输对象(DTO),并且不希望花费时间编写大量的模板代码时。
  • 在开发过程中为了提高代码的简洁性和可读性,尤其是在领域驱动设计(DDD)中定义领域模型时。
  • 快速原型开发,减少不必要的编码工作量。

内在运行逻辑

Lombok 的工作原理基于编译期处理。当你编译使用了 Lombok 注解的代码时,Lombok 会修改字节码,在编译阶段自动插入所需的额外方法和构造函数。这意味着你在源代码中看不到这些自动生成的方法,但在编译后的类文件中它们是存在的,并且可以像正常编写的方法一样被调用。

需要注意的是,由于 Lombok 修改字节码的过程是在编译期间进行的,因此 IDE 需要相应的插件支持才能正确地识别这些自动生成的方法,避免出现“找不到方法”的错误提示。例如,IntelliJ IDEA 需要安装 Lombok 插件,而 Eclipse 则可以通过安装特定的更新站点来获得支持。

如果没有 @Data 注解,你将手动编写所有 getter、setter、toString、equals 和 hashCode 方法。这些方法虽然功能简单,但写起来非常繁琐,尤其是当类中字段较多时。

🧱 示例:有 @Data 的 ShopPageReqVO

package cn.iocoder.yudao.module.system.controller.admin.shop.vo;
import cn.iocoder.yudao.framework.common.pojo.PageParam;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.EqualsAndHashCode;
@Schema(description = "管理后台 - 商铺分页查询 Request VO")
@Data
@EqualsAndHashCode(callSuper = false)
public class ShopPageReqVO extends PageParam {
    // 可以在这里添加查询条件字段
    @Schema(description = "商铺名称")
    private String shopName;
    @Schema(description = "管理员姓名")
    private String manager;
    @Schema(description = "联系电话")
    private String phone;
    @Schema(description = "模糊查询关键字")
    private String keyword;
}

🧱 示例:没有@Data的ShopPageReqVO

以下是 去掉 @Data 后的完整代码,并手动补全了必要的方法:

package cn.iocoder.yudao.module.system.controller.admin.shop.vo;
import cn.iocoder.yudao.framework.common.pojo.PageParam;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.EqualsAndHashCode;
import java.util.Objects;
@Schema(description = "管理后台 - 商铺分页查询 Request VO")
@EqualsAndHashCode(callSuper = false)
public class ShopPageReqVO extends PageParam {
    @Schema(description = "商铺名称")
    private String shopName;
    @Schema(description = "管理员姓名")
    private String manager;
    @Schema(description = "联系电话")
    private String phone;
    @Schema(description = "模糊查询关键字")
    private String keyword;
    // ========== 手动添加的方法 ==========
    // Getter and Setter for shopName
    public String getShopName() {
        return shopName;
    }
    public void setShopName(String shopName) {
        this.shopName = shopName;
    }
    // Getter and Setter for manager
    public String getManager() {
        return manager;
    }
    public void setManager(String manager) {
        this.manager = manager;
    }
    // Getter and Setter for phone
    public String getPhone() {
        return phone;
    }
    public void setPhone(String phone) {
        this.phone = phone;
    }
    // Getter and Setter for keyword
    public String getKeyword() {
        return keyword;
    }
    public void setKeyword(String keyword) {
        this.keyword = keyword;
    }
    // toString 方法
    @Override
    public String toString() {
        return "ShopPageReqVO{" +
                "shopName='" + shopName + '\'' +
                ", manager='" + manager + '\'' +
                ", phone='" + phone + '\'' +
                ", keyword='" + keyword + '\'' +
                "} " + super.toString();
    }
    // equals 方法
    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (!(o instanceof ShopPageReqVO)) return false;
        if (!super.equals(o)) return false;
        ShopPageReqVO that = (ShopPageReqVO) o;
        return Objects.equals(shopName, that.shopName) &&
               Objects.equals(manager, that.manager) &&
               Objects.equals(phone, that.phone) &&
               Objects.equals(keyword, that.keyword);
    }
    // hashCode 方法
    @Override
    public int hashCode() {
        return Objects.hash(super.hashCode(), shopName, manager, phone, keyword);
    }
}

到此这篇关于@Data是什么?的文章就介绍到这了,更多相关@Data是什么内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • java解决请求跨域的两种方法

    java解决请求跨域的两种方法

    这篇文章主要为大家详细介绍了java解决请求跨域的两种方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-08-08
  • JavaWeb Spring依赖注入深入学习

    JavaWeb Spring依赖注入深入学习

    这篇文章主要为大家详细介绍了JavaWeb Spring依赖注入,深入学习Spring依赖注入,感兴趣的小伙伴们可以参考一下
    2016-09-09
  • java反射机制实战示例分享

    java反射机制实战示例分享

    这篇文章主要介绍了java反射机制实战示例,需要的朋友可以参考下
    2014-03-03
  • Java日志框架用法及常见问题解决方案

    Java日志框架用法及常见问题解决方案

    这篇文章主要介绍了Java日志框架用法及常见问题解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-10-10
  • IDEA配置码云Gitee的使用详解

    IDEA配置码云Gitee的使用详解

    这篇文章主要介绍了IDEA配置码云Gitee的使用,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-12-12
  • SpringMVC 域对象共享数据的实现示例

    SpringMVC 域对象共享数据的实现示例

    本文主要介绍了SpringMVC 域对象共享数据的实现示例,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-08-08
  • mybatis中@Param注解总是报取不到参数问题及解决

    mybatis中@Param注解总是报取不到参数问题及解决

    这篇文章主要介绍了mybatis中@Param注解总是报取不到参数问题及解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-07-07
  • Java自动解压文件实例代码

    Java自动解压文件实例代码

    Java自动解压文件实例代码,需要的朋友可以参考一下
    2013-04-04
  • Java8 Stream flatmap中间操作用法解析

    Java8 Stream flatmap中间操作用法解析

    这篇文章主要介绍了Java8 Stream flatmap中间操作用法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-07-07
  • springboot实现FastJson解析json数据的方法

    springboot实现FastJson解析json数据的方法

    本篇文章主要介绍了springboot实现FastJson解析json数据的方法,非常具有实用价值,需要的朋友可以参考下
    2017-04-04

最新评论