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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

import lombok 报错_lombok

發布時間:2025/4/17 编程问答 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 import lombok 报错_lombok 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Lombok簡介

Lombok是一個可以通過簡單的注解形式來幫助我們簡化消除一些必須有但顯得很臃腫的Java代碼的工具,通過使用對應的注解,可以在編譯源碼的時候生成對應的方法。官方地址:https://projectlombok.org/,github地址:https://github.com/rzwitserloot/lombok。

IntelliJ IDEA 使用它的方法

先安裝插件

Paste_Image.png

然后引入lombok的jar包

org.projectlombok

lombok

1.16.14

注解的介紹

@Getter and @Setter

你可以用@Getter / @Setter注釋任何字段(當然也可以注釋到類上的),讓lombok自動生成默認的getter / setter方法。

默認生成的方法是public的,如果要修改方法修飾符可以設置AccessLevel的值,例如:@Getter(access = AccessLevel.PROTECTED)

Paste_Image.png

import lombok.AccessLevel;

import lombok.Getter;

import lombok.Setter;

public class User {

@Getter(AccessLevel.PROTECTED) @Setter private Integer id;

@Getter @Setter private String name;

@Getter @Setter private String phone;

}

@ToString

生成toString()方法,默認情況下,它會按順序(以逗號分隔)打印你的類名稱以及每個字段??梢赃@樣設置不包含哪些字段@ToString(exclude = "id") / @ToString(exclude = {"id","name"})

如果繼承的有父類的話,可以設置callSuper 讓其調用父類的toString()方法,例如:@ToString(callSuper = true)

import lombok.ToString;

@ToString(exclude = {"id","name"})

public class User {

private Integer id;

private String name;

private String phone;

}

生成toString方法如下:

public String toString(){

return "User(phone=" + phone + ")";

}

@EqualsAndHashCode

生成hashCode()和equals()方法,默認情況下,它將使用所有非靜態,非transient字段。但可以通過在可選的exclude參數中來排除更多字段?;蛘?#xff0c;通過在parameter參數中命名它們來準確指定希望使用哪些字段。

@EqualsAndHashCode(exclude={"id", "shape"})

public class EqualsAndHashCodeExample {

private transient int transientVar = 10;

private String name;

private double score;

private Shape shape = new Square(5, 10);

private String[] tags;

private transient int id;

public String getName() {

return this.name;

}

@EqualsAndHashCode(callSuper=true)

public static class Square extends Shape {

private final int width, height;

public Square(int width, int height) {

this.width = width;

this.height = height;

}

}

}

對比代碼如下:

import java.util.Arrays;

public class EqualsAndHashCodeExample {

private transient int transientVar = 10;

private String name;

private double score;

private Shape shape = new Square(5, 10);

private String[] tags;

private transient int id;

public String getName() {

return this.name;

}

@Override public boolean equals(Object o) {

if (o == this) return true;

if (!(o instanceof EqualsAndHashCodeExample)) return false;

EqualsAndHashCodeExample other = (EqualsAndHashCodeExample) o;

if (!other.canEqual((Object)this)) return false;

if (this.getName() == null ? other.getName() != null : !this.getName().equals(other.getName())) return false;

if (Double.compare(this.score, other.score) != 0) return false;

if (!Arrays.deepEquals(this.tags, other.tags)) return false;

return true;

}

@Override public int hashCode() {

final int PRIME = 59;

int result = 1;

final long temp1 = Double.doubleToLongBits(this.score);

result = (result*PRIME) + (this.name == null ? 43 : this.name.hashCode());

result = (result*PRIME) + (int)(temp1 ^ (temp1 >>> 32));

result = (result*PRIME) + Arrays.deepHashCode(this.tags);

return result;

}

protected boolean canEqual(Object other) {

return other instanceof EqualsAndHashCodeExample;

}

public static class Square extends Shape {

private final int width, height;

public Square(int width, int height) {

this.width = width;

this.height = height;

}

@Override public boolean equals(Object o) {

if (o == this) return true;

if (!(o instanceof Square)) return false;

Square other = (Square) o;

if (!other.canEqual((Object)this)) return false;

if (!super.equals(o)) return false;

if (this.width != other.width) return false;

if (this.height != other.height) return false;

return true;

}

@Override public int hashCode() {

final int PRIME = 59;

int result = 1;

result = (result*PRIME) + super.hashCode();

result = (result*PRIME) + this.width;

result = (result*PRIME) + this.height;

return result;

}

protected boolean canEqual(Object other) {

return other instanceof Square;

}

}

}

@NoArgsConstructor, @RequiredArgsConstructor, @AllArgsConstructor

@NoArgsConstructor生成一個無參構造方法。當類中有final字段沒有被初始化時,編譯器會報錯,此時可用@NoArgsConstructor(force = true),然后就會為沒有初始化的final字段設置默認值 0 / false / null。對于具有約束的字段(例如@NonNull字段),不會生成檢查或分配,因此請注意,正確初始化這些字段之前,這些約束無效。

import lombok.NoArgsConstructor;

import lombok.NonNull;

@NoArgsConstructor(force = true)

public class User {

@NonNull private Integer id;

@NonNull private String name;

private final String phone ;

}

@RequiredArgsConstructor會生成構造方法(可能帶參數也可能不帶參數),如果帶參數,這參數只能是以final修飾的未經初始化的字段,或者是以@NonNull注解的未經初始化的字段

@RequiredArgsConstructor(staticName = "of")會生成一個of()的靜態方法,并把構造方法設置為私有的

Paste_Image.png

Paste_Image.png

import lombok.NonNull;

import lombok.RequiredArgsConstructor;

@RequiredArgsConstructor

public class User {

@NonNull private Integer id ;

@NonNull private String name = "bbbb";

private final String phone;

}

//另外一個

import lombok.NonNull;

import lombok.RequiredArgsConstructor;

@RequiredArgsConstructor(staticName = "of")

public class User {

@NonNull private Integer id ;

@NonNull private String name = "bbbb";

private final String phone;

}

@AllArgsConstructor 生成一個全參數的構造方法

Paste_Image.png

import lombok.AllArgsConstructor;

import lombok.NonNull;

@AllArgsConstructor

public class User {

@NonNull private Integer id ;

@NonNull private String name = "bbbb";

private final String phone;

}

@Data

@Data 包含了 @ToString、@EqualsAndHashCode、@Getter / @Setter和@RequiredArgsConstructor的功能

@Accessors

@Accessors 主要用于控制生成的getter和setter

主要參數介紹

fluent boolean值,默認為false。此字段主要為控制生成的getter和setter方法前面是否帶get/set

chain boolean值,默認false。如果設置為true,setter返回的是此對象,方便鏈式調用方法

prefix 設置前綴 例如:@Accessors(prefix = "abc") private String abcAge 當生成get/set方法時,會把此前綴去掉

Paste_Image.png

@Synchronized

給方法加上同步鎖

import lombok.Synchronized;

public class SynchronizedExample {

private final Object readLock = new Object();

@Synchronized

public static void hello() {

System.out.println("world");

}

@Synchronized

public int answerToLife() {

return 42;

}

@Synchronized("readLock")

public void foo() {

System.out.println("bar");

}

}

//等效代碼

public class SynchronizedExample {

private static final Object $LOCK = new Object[0];

private final Object $lock = new Object[0];

private final Object readLock = new Object();

public static void hello() {

synchronized($LOCK) {

System.out.println("world");

}

}

public int answerToLife() {

synchronized($lock) {

return 42;

}

}

public void foo() {

synchronized(readLock) {

System.out.println("bar");

}

}

}

@Wither

提供了給final字段賦值的一種方法

//使用lombok注解的

import lombok.AccessLevel;

import lombok.NonNull;

import lombok.experimental.Wither;

public class WitherExample {

@Wither private final int age;

@Wither(AccessLevel.PROTECTED) @NonNull private final String name;

public WitherExample(String name, int age) {

if (name == null) throw new NullPointerException();

this.name = name;

this.age = age;

}

}

//等效代碼

import lombok.NonNull;

public class WitherExample {

private final int age;

private @NonNull final String name;

public WitherExample(String name, int age) {

if (name == null) throw new NullPointerException();

this.name = name;

this.age = age;

}

public WitherExample withAge(int age) {

return this.age == age ? this : new WitherExample(age, name);

}

protected WitherExample withName(@NonNull String name) {

if (name == null) throw new java.lang.NullPointerException("name");

return this.name == name ? this : new WitherExample(age, name);

}

}

@onX

在注解里面添加注解的方式

直接看代碼

public class SchoolDownloadLimit implements Serializable {

private static final long serialVersionUID = -196412797757026250L;

@Getter(onMethod = @_({@Id,@Column(name="id",nullable=false),@GeneratedValue(strategy= GenerationType.AUTO)}))

@Setter

private Integer id;

@Getter(onMethod = @_(@Column(name="school_id")))

@Setter

private Integer schoolId;

@Getter(onMethod = @_(@Column(name = "per_download_times")))

@Setter

private Integer perDownloadTimes;

@Getter(onMethod = @_(@Column(name = "limit_time")))

@Setter

private Integer limitTime;

@Getter(onMethod = @_(@Column(name = "download_to_limit_an_hour")))

@Setter

private Integer downloadToLimitInHour;

@Getter(onMethod = @_(@Column(name = "available")))

@Setter

private Integer available = 1;

}

@Builder

@Builder注釋為你的類生成復雜的構建器API。

lets you automatically produce the code required to have your class be instantiable with code such as:

Person.builder().name("Adam Savage").city("San Francisco").job("Mythbusters").job("Unchained Reaction").build();

直接看官方示例,對比一下就都明白了

//使用lombok注解的

import lombok.Builder;

import lombok.Singular;

import java.util.Set;

@Builder

public class BuilderExample {

private String name;

private int age;

@Singular private Set occupations;

}

//等效代碼

import java.util.Set;

class BuilderExample {

private String name;

private int age;

private Set occupations;

BuilderExample(String name, int age, Set occupations) {

this.name = name;

this.age = age;

this.occupations = occupations;

}

public static BuilderExampleBuilder builder() {

return new BuilderExampleBuilder();

}

public static class BuilderExampleBuilder {

private String name;

private int age;

private java.util.ArrayList occupations;

BuilderExampleBuilder() {

}

public BuilderExampleBuilder name(String name) {

this.name = name;

return this;

}

public BuilderExampleBuilder age(int age) {

this.age = age;

return this;

}

public BuilderExampleBuilder occupation(String occupation) {

if (this.occupations == null) {

this.occupations = new java.util.ArrayList();

}

this.occupations.add(occupation);

return this;

}

public BuilderExampleBuilder occupations(Collection extends String> occupations) {

if (this.occupations == null) {

this.occupations = new java.util.ArrayList();

}

this.occupations.addAll(occupations);

return this;

}

public BuilderExampleBuilder clearOccupations() {

if (this.occupations != null) {

this.occupations.clear();

}

return this;

}

public BuilderExample build() {

// complicated switch statement to produce a compact properly sized immutable set omitted.

// go to https://projectlombok.org/features/Singular-snippet.html to see it.

Set occupations = ...;

return new BuilderExample(name, age, occupations);

}

@java.lang.Override

public String toString() {

return "BuilderExample.BuilderExampleBuilder(name = " + this.name + ", age = " + this.age + ", occupations = " + this.occupations + ")";

}

}

}

@Delegate

這個注解也是相當的牛逼,看下面的截圖,它會該類生成一些列的方法,這些方法都來自與List接口

Paste_Image.png

附帶一個我使用的例子

import lombok.Getter;

import lombok.RequiredArgsConstructor;

import lombok.Setter;

import lombok.ToString;

import lombok.experimental.Accessors;

import javax.persistence.Column;

import javax.persistence.Entity;

import javax.persistence.GeneratedValue;

import javax.persistence.GenerationType;

import javax.persistence.Id;

import javax.persistence.Table;

import java.io.Serializable;

import java.util.Date;

@Entity

@Table(name= Constants.TABLE_SCHOOL_DOWNLOAD_LIMIT)

@RequiredArgsConstructor(staticName = "of")

@Accessors(chain = true)

@ToString

public class SchoolDownloadLimit implements Serializable {

private static final long serialVersionUID = -196412797757026250L;

@Getter(onMethod = @_({@Id,@Column(name="id",nullable=false),@GeneratedValue(strategy= GenerationType.AUTO)}))

@Setter

private Integer id;

@Getter(onMethod = @_(@Column(name="school_id")))

@Setter

private Integer schoolId;

@Getter(onMethod = @_(@Column(name = "per_download_times")))

@Setter

private Integer perDownloadTimes;

@Getter(onMethod = @_(@Column(name = "limit_time")))

@Setter

private Integer limitTime;

@Getter(onMethod = @_(@Column(name = "download_to_limit_an_hour")))

@Setter

private Integer downloadToLimitInHour;

@Getter(onMethod = @_(@Column(name = "available")))

@Setter

private Integer available = 1;

@Getter(onMethod = @_(@Column(name = "create_time")))

@Setter

private Date createTime;

@Getter(onMethod = @_(@Column(name = "update_time")))

@Setter

private Date updateTime;

}

總結

以上是生活随笔為你收集整理的import lombok 报错_lombok的全部內容,希望文章能夠幫你解決所遇到的問題。

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