Our-task介紹
本篇博客是我的github上項目our-task:一個完整的清單管理系統的配套教程文檔,大家感興趣的話,可以去看看
安裝Lombok
加入Maven依賴
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
IDEA中安裝Lombok插件
依次點擊:FIle-Settings-Plugins,從插件欄中搜索Lombok進行安裝,安裝之後勾選Lombok啟動即可。
註解介紹
@Getter和@Setter
放在類上,為該類的所有屬性自動生成Getter和Setter方法
import lombok.Getter;
import lombok.Setter;
/**
* @program: our-task
* @description: 學生類
* @author: water76016
* @create: 2020-12-15 10:57
**/
@Getter
@Setter
public class Student {
int id;
String name;
int age;
}
@ToString
自動重寫toString方法,和我們平時使用IDEA編輯器自動生成的一樣
/**
* @program: our-task
* @description: 學生類
* @author: water76016
* @create: 2020-12-15 10:57
**/
@ToString
public class Student {
int id;
String name;
int age;
}
@EqualsAndHashCode
自動生成equal(Object other)和hashCode()方法,如果某些變量不想要加入該註解,可以使用exclude進行排除
import lombok.EqualsAndHashCode;
@EqualsAndHashCode
public class Student {
int id;
String name;
int age;
}
import lombok.EqualsAndHashCode;
//把name屬性排除在外
@EqualsAndHashCode(exclude = "name")
public class Student {
int id;
String name;
int age;
}
問:為什麼把生成equal(Object other)和hashCode()方法弄成一個註解,而不是分開使用?
答:在Java中有規定:當兩個對象相等時,它們的hashcode是一定相等的。但是,當兩個對象的hashcode相同,對象不一定相等。這樣做是為了防止違反Java規定的情況發生。
@NoArgsConstructor
生成一個不包含任何參數的無參構造器
import lombok.NoArgsConstructor;
@NoArgsConstructor
public class Student {
int id;
String name;
int age;
}
@AllArgsConstructor
生成一個包含所有參數的構造器
import lombok.AllArgsConstructor;
@AllArgsConstructor
public class Student {
int id;
String name;
int age;
}
@RequiredArgsConstructor
為“特定參數”生成構造器,這裡的“特定參數”,特指那些加上final修飾詞的屬性
import lombok.RequiredArgsConstructor;
@RequiredArgsConstructor
public class Student {
int id;
final String name;
int age;
public static void main(String[] args) {
Student student = new Student("33");
}
}
這裡我們只為name加上final修飾,可以發現,我們只生成了一個包含name屬性的構造器。另外,如果所有的屬性都沒有final修飾的話,使用@RequiredArgsConstructor會生成一個無參的構造器。
@Data
這是一個組合註解,加了這個註解,相當於加入了@Getter、@Setter、@ToString、@EqualsAndHashCode和@RequiredArgsConstructor這五個註解。
@Value
這也是一個組合註解,但是會把所有的變量都設置為final的,其他的就和@Data一樣了。等同於加入了@Getter、@ToString、@EqualsAndHashCode和@RequiredArgsConstructor這四個註解(由於所有屬性是final的,所以沒有@setter註解了)。
@Builder
流式的set值寫法,不過畢竟是給屬性賦值,基本的setter還是需要有的,一般來說,@Builder會和@Data一起使用。
import lombok.Builder;
import lombok.Data;
@Builder
@Data
public class Student {
int id;
String name;
int age;
public static void main(String[] args) {
Student student = Student.builder().id(1).name("water").age(18).build();
}
}
@Slf4j
自動生成該類的log靜態常量,就可以直接打印日誌了,不用去new一個log的靜態常量了。
@Slf4j
public class Student {
int id;
String name;
int age;
public static void main(String[] args) {
log.info("hello world");
}
}