Java中的@Data是什么以及如何使用
@Data 是 Lombok 項目中的一個注解,Lombok 是一種 Java 庫,它通過注解來簡化代碼的編寫過程。使用 Lombok 可以幫助開發(fā)者減少樣板代碼(boilerplate code),比如 getter、setter 方法、構造函數(shù)、toString 方法等。
作用
- 自動生成類中所有字段的
getter和setter方法。 - 自動生成
toString方法。 - 自動生成
equals和hashCode方法。 - 自動生成無參構造函數(shù)以及全參構造函數(shù)(如果需要)。
如何使用
首先需要在項目中引入 Lombok 依賴。對于 Maven 項目,可以在 pom.xml 文件中添加以下依賴:
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.24</version> <!-- 請根據(jù)實際情況選擇版本 -->
<scope>provided</scope>
</dependency>然后,在需要簡化的 Java 類上添加 @Data 注解:
import lombok.Data;
@Data
public class User {
private Long id;
private String name;
}這樣就無需手動為 User 類編寫 getter、setter、toString 等方法了。
使用場景
- 當你需要快速創(chuàng)建實體類或數(shù)據(jù)傳輸對象(DTO),并且不希望花費時間編寫大量的模板代碼時。
- 在開發(fā)過程中為了提高代碼的簡潔性和可讀性,尤其是在領域驅(qū)動設計(DDD)中定義領域模型時。
- 快速原型開發(fā),減少不必要的編碼工作量。
內(nèi)在運行邏輯
Lombok 的工作原理基于編譯期處理。當你編譯使用了 Lombok 注解的代碼時,Lombok 會修改字節(jié)碼,在編譯階段自動插入所需的額外方法和構造函數(shù)。這意味著你在源代碼中看不到這些自動生成的方法,但在編譯后的類文件中它們是存在的,并且可以像正常編寫的方法一樣被調(diào)用。
需要注意的是,由于 Lombok 修改字節(jié)碼的過程是在編譯期間進行的,因此 IDE 需要相應的插件支持才能正確地識別這些自動生成的方法,避免出現(xiàn)“找不到方法”的錯誤提示。例如,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 = "聯(lián)系電話")
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 = "聯(lián)系電話")
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是什么內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
SpringMVC 域?qū)ο蠊蚕頂?shù)據(jù)的實現(xiàn)示例
本文主要介紹了SpringMVC 域?qū)ο蠊蚕頂?shù)據(jù)的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-08-08
mybatis中@Param注解總是報取不到參數(shù)問題及解決
這篇文章主要介紹了mybatis中@Param注解總是報取不到參數(shù)問題及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-07-07
springboot實現(xiàn)FastJson解析json數(shù)據(jù)的方法
本篇文章主要介紹了springboot實現(xiàn)FastJson解析json數(shù)據(jù)的方法,非常具有實用價值,需要的朋友可以參考下2017-04-04

