日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

使用Lombok优化代码

發布時間:2025/5/22 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 使用Lombok优化代码 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

簡介

Lombok項目是一個Java庫,Lombok提供了一組有用的注釋,用來消除Java類中的大量樣板代碼,簡潔且易于維護的Java類。

使用工具

IDEA2018.2 MySQL5.6 JDK1.8

使用jar包

<dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.8</version><scope>provided</scope> </dependency>

環境搭建

請參照
https://blog.csdn.net/qq_44989881/article/details/102702027
進行項目配置

代碼示例

優化Student.java代碼

Student.java
package com.vvcat.gitee.bean;import lombok.*;import javax.persistence.*;/*** @ToString(callSuper=true,exclude="someExcludedField")* 類使用@ToString注解,Lombok會生成一個toString()方法,默認情況下,會輸出類名、所有屬性(會按照屬性定義順序),用逗號來分割。* 通過將includeFieldNames參數設為true,就能明確的輸出toString()屬性。** @RequiredArgsConstructor(staticName = "Student")* 注解在類上,會生成構造方法(可能帶參數也可能不帶參數)。* 注意:如果帶參數,這參數只能是以 final 修飾的未經初始化的字段或者是以 @NonNull 注解的未經初始化的字段。* 該注解還可以用 @RequiredArgsConstructor(staticName="methodName") 的形式生成一個指定名稱的靜態方法,返回一個調用相應的構造方法產生的對象** @NonNull* 該注解用在屬性或構造器上,Lombok會生成一個非空的聲明,可用于校驗參數,能幫助避免空指針。*/@Entity @Table(name = "student")//數據庫表明 @ToString(callSuper=true,exclude="age",includeFieldNames = true) //使用lombok 重寫toSting方法 默認的toString格式 @NoArgsConstructor //無參構造器 @RequiredArgsConstructor(staticName = "Student") //部分參數構造器 @AllArgsConstructor(access = AccessLevel.PROTECTED) //全參構造器 public class Student {@Id//聲明id為主鍵@Setter //為代碼添加Setter方法@Getter //為代碼添加Getter方法@GeneratedValue(strategy = GenerationType.IDENTITY)//聲明自動增長@Column(name = "id")//聲明數據庫對應的字段private Integer id;@NonNull //使用@NonNull注解,指定 stuName 為構造方法中的參數@Setter //為代碼添加Setter方法@Getter //為代碼添加Getter方法@Column(name = "stuName")//聲明數據庫對應的字段//定義字段也是有講究的,比如首字母小寫,后邊的駝峰,對應的數據庫字段,遇到駝峰用下劃線斷開//比如實體類定義的userName,則數據庫字段為user_name,//比如實體類定義的username,則數據庫字段也為usernameprivate String stu_name;@NonNull //使用@NonNull注解,指定 age 為構造方法中的參數@Setter //為代碼添加Setter方法@Getter //為代碼添加Getter方法@Column(name = "age")//聲明數據庫對應的字段private Integer age;@NonNull //使用@NonNull注解,指定 sex 為構造方法中的參數@Setter //為代碼添加Setter方法@Getter //為代碼添加Getter方法@Column(name = "sex")//聲明數據庫對應的字段private String sex;}

使用說明

1. @ToString注解

  • @ToString(callSuper=true,exclude=“age”)
  • 類使用@ToString注解,Lombok會生成一個toString()方法,默認情況下,會輸出類名、所有屬性(會按照屬性定義順序),用逗號來分割。
    • 通過將includeFieldNames參數設為true,就能明確的輸出toString()屬性。

@ToString注解的使用可以代替快捷鍵Alt + Insert中ToString方法的生成

快捷鍵Alt + Insert生成的ToString方法:

@Overridepublic String toString() {return "Student{" +"id=" + id +", stu_name='" + stu_name + '\'' +", age=" + age +", sex='" + sex + '\'' +'}';}

使用@ToString注解生成的ToString方法:

public String toString() {return "Student(super=" + super.toString() + ", id=" + this.getId() + ", stu_name=" + this.getStu_name() + ", age=" + this.getAge() + ", sex=" + this.getSex() + ")"; }

2. @Setter和@Getter注解

@Setter和@Getter注解 的使用可以代替快捷鍵Alt + Insert中Setter和Getter方法的生成
快捷鍵Alt + Insert生成的Setter和Gette方法:

public String getStu_name() {return stu_name; }public void setStu_name(String stu_name) {this.stu_name = stu_name; }

使用@Setter和@Getter注解生成的Setter和Getter方法:

public void setStu_name(String stu_name) {this.stu_name = stu_name; }public String getStu_name() {return this.stu_name; }

在 private String stu_name; 添加@Setter和@Getter注解后再添加@NonNull注解

@NonNull //使用@NonNull注解,指定 stuName 為構造方法中的參數 @Setter //為代碼添加Setter方法 @Getter //為代碼添加Getter方法 @Column(name = "stuName")//聲明數據庫對應的字段 private String stu_name;

生成的Setter和Getter方法:

public void setStu_name(@NonNull String stu_name) {if (stu_name == null) {throw new NullPointerException("stu_name");} else {this.stu_name = stu_name;} }@NonNull public String getStu_name() {return this.stu_name; }

@NonNull 該注解用在屬性或構造器上,Lombok會生成一個非空的聲明,可用于校驗參數,能幫助避免空指針。

3. @NoArgsConstructor注解

@NoArgsConstructor注解 的使用可以代替快捷鍵Alt + Insert中Constructor方法的生成
快捷鍵Alt + Insert生成的Constructor方法:

public Student() { }

使用@NoArgsConstructor注解生成的Constructor方法:

public Student() { }

4. @RequiredArgsConstructor注解

  • @RequiredArgsConstructor(staticName = “Student”)
  • 注解在類上,會生成構造方法(可能帶參數也可能不帶參數)。
  • 注意:如果帶參數,這參數只能是以 final 修飾的未經初始化的字段或者是以 @NonNull 注解的未經初始化的字段。

使用@RequiredArgsConstructor 需要在封裝的屬性上添加@NonNull注解
例如(下面例子中沒有為id 添加 @NonNull )

@Id//聲明id為主鍵 @Setter //為代碼添加Setter方法 @Getter //為代碼添加Getter方法 @GeneratedValue(strategy = GenerationType.IDENTITY)//聲明自動增長 @Column(name = "id")//聲明數據庫對應的字段 private Integer id;@NonNull //使用@NonNull注解,指定 stuName 為構造方法中的參數 @Setter //為代碼添加Setter方法 @Getter //為代碼添加Getter方法 @Column(name = "stuName")//聲明數據庫對應的字段 //定義字段也是有講究的,比如首字母小寫,后邊的駝峰,對應的數據庫字段,遇到駝峰用下劃線斷開 //比如實體類定義的userName,則數據庫字段為user_name, //比如實體類定義的username,則數據庫字段也為username private String stu_name;@NonNull //使用@NonNull注解,指定 age 為構造方法中的參數 @Setter //為代碼添加Setter方法 @Getter //為代碼添加Getter方法 @Column(name = "age")//聲明數據庫對應的字段 private Integer age;@NonNull //使用@NonNull注解,指定 sex 為構造方法中的參數 @Setter //為代碼添加Setter方法 @Getter //為代碼添加Getter方法 @Column(name = "sex")//聲明數據庫對應的字段 private String sex;

@RequiredArgsConstructor注解 的使用可以代替快捷鍵Alt + Insert中Constructor方法的生成
快捷鍵Alt + Insert生成的Constructor方法:

public Student(String stu_name, Integer age, String sex) {this.stu_name = stu_name;this.age = age;this.sex = sex; }

使用@RequiredArgsConstructor注解生成的Constructor方法:

private Student(@NonNull String stu_name, @NonNull Integer age, @NonNull String sex) {if (stu_name == null) {throw new NullPointerException("stu_name");} else if (age == null) {throw new NullPointerException("age");} else if (sex == null) {throw new NullPointerException("sex");} else {this.stu_name = stu_name;this.age = age;this.sex = sex;} }
  • 該注解還可以用 @RequiredArgsConstructor(staticName=“methodName”) 的形式生成一個指定名稱的靜態方法,返回一個調用相應的構造方法產生的對象
    例如:
@RequiredArgsConstructor(staticName = "Test") //部分參數構造器

使用@RequiredArgsConstructor注解生成的Constructor方法:

public static Student Test(@NonNull String stu_name, @NonNull Integer age, @NonNull String sex) {return new Student(stu_name, age, sex); }

5. @AllArgsConstructor注解

@AllArgsConstructor注解 的使用可以代替快捷鍵Alt + Insert中Constructor方法的生成
快捷鍵Alt + Insert生成的Constructor方法:

public Student(Integer id,String stu_name, Integer age, String sex) {this.id = id;this.stu_name = stu_name;this.age = age;this.sex = sex; }

使用@AllArgsConstructor注解生成的Constructor方法:

@ConstructorProperties({"id", "stu_name", "age", "sex"}) protected Student(Integer id, String stu_name, Integer age, String sex) {this.id = id;this.stu_name = stu_name;this.age = age;this.sex = sex; }

在屬性上添加上@NonNull注解后,使用@AllArgsConstructor注解生成的Constructor方法:

@ConstructorProperties({"id", "stu_name", "age", "sex"}) protected Student(Integer id, @NonNull String stu_name, @NonNull Integer age, @NonNull String sex) {if (stu_name == null) {throw new NullPointerException("stu_name");} else if (age == null) {throw new NullPointerException("age");} else if (sex == null) {throw new NullPointerException("sex");} else {this.id = id;this.stu_name = stu_name;this.age = age;this.sex = sex;} }

6.@NonNull注解

該注解用在屬性或構造器上,Lombok會生成一個非空的聲明,可用于校驗參數,能幫助避免空指針。

7.@Data注解

@Data注解在 類 上;提供類所有屬性的 get 和 set 方法,此外還提供了equals、canEqual、hashCode、toString 方法。

在使用注解時的代碼:

import lombok.*; import javax.persistence.*;@Entity @Table(name = "student")//數據庫表明 @Data //使用Data注解 public class Student {@Id//聲明id為主鍵@GeneratedValue(strategy = GenerationType.IDENTITY)//聲明自動增長@Column(name = "id")//聲明數據庫對應的字段private Integer id;@Column(name = "stuName")//聲明數據庫對應的字段private String stu_name;@Column(name = "age")//聲明數據庫對應的字段private Integer age;@Column(name = "sex")//聲明數據庫對應的字段private String sex;}

使用@Data注解編譯后自動生成的代碼:

import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.Table;@Entity @Table(name = "student" ) public class Student {@Id@GeneratedValue(strategy = GenerationType.IDENTITY)@Column(name = "id")private Integer id;@Column(name = "stuName")private String stu_name;@Column(name = "age")private Integer age;@Column(name = "sex")private String sex;public Student() {}public Integer getId() {return this.id;}public String getStu_name() {return this.stu_name;}public Integer getAge() {return this.age;}public String getSex() {return this.sex;}public void setId(Integer id) {this.id = id;}public void setStu_name(String stu_name) {this.stu_name = stu_name;}public void setAge(Integer age) {this.age = age;}public void setSex(String sex) {this.sex = sex;}public boolean equals(Object o) {if (o == this) {return true;} else if (!(o instanceof Student)) {return false;} else {Student other = (Student)o;if (!other.canEqual(this)) {return false;} else {label59: {Object this$id = this.getId();Object other$id = other.getId();if (this$id == null) {if (other$id == null) {break label59;}} else if (this$id.equals(other$id)) {break label59;}return false;}Object this$stu_name = this.getStu_name();Object other$stu_name = other.getStu_name();if (this$stu_name == null) {if (other$stu_name != null) {return false;}} else if (!this$stu_name.equals(other$stu_name)) {return false;}Object this$age = this.getAge();Object other$age = other.getAge();if (this$age == null) {if (other$age != null) {return false;}} else if (!this$age.equals(other$age)) {return false;}Object this$sex = this.getSex();Object other$sex = other.getSex();if (this$sex == null) {if (other$sex != null) {return false;}} else if (!this$sex.equals(other$sex)) {return false;}return true;}}}protected boolean canEqual(Object other) {return other instanceof Student;}public int hashCode() {int PRIME = true;int result = 1;Object $id = this.getId();int result = result * 59 + ($id == null ? 43 : $id.hashCode());Object $stu_name = this.getStu_name();result = result * 59 + ($stu_name == null ? 43 : $stu_name.hashCode());Object $age = this.getAge();result = result * 59 + ($age == null ? 43 : $age.hashCode());Object $sex = this.getSex();result = result * 59 + ($sex == null ? 43 : $sex.hashCode());return result;}public String toString() {return "Student(id=" + this.getId() + ", stu_name=" + this.getStu_name() + ", age=" + this.getAge() + ", sex=" + this.getSex() + ")";} }

其它注解

@Log4j
@EqualsAndHashCode
@Cleanup
@Value
@SneakyThrows
@Synchronized

目前剛開始接觸,還未使用到,日后用到之后,再進行補充說明

總結

以上是生活随笔為你收集整理的使用Lombok优化代码的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。