lombok基本使用
lombok简介
官网:https://projectlombok.org
lombok是项目中最常用的插件之一,是简化开发的重要工具,常用于POJO类上,自动生成Setter/Getter、空参与全参构造器、流式set等。
常用的注解有 @Getter 、@Setter 、@RequiredArgsConstructor、 @ToString 、@EqualsAndHashCode、@Data、@AllArgsConstructor、@NoArgsConstructor、@Builder。
常用组合为@AllArgsConstructor、@NoArgsConstructor、@Builder与@Data。
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class User {
private String id;
// ...
}
idea安装lombok插件
pom.xml
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.20</version>
</dependency>
@Setter
- 自动产生 setter
- static 与 final 修饰的无法生成对应的Set方法
import lombok.Getter;
/**
* @author comlong
* @create 2021-07-11 15:38
* @Description 自动产生 setter
* static 与 final 修饰的无法生成对应的Set方法
*/
@Setter
public class SetterInfo {
/**
* 以下6个均可生成对应的Set方法
*/
public String puString;
String string;
protected int proInt;
private Integer priInt;
private char priChar;
transient int tiInt;
/**
* 以下均不能生成对应的Set方法
*/
final int inum = 100;
final char ch = 'c';
final String fString = "fString";
final transient int ftiInt = 1020;
static int num;
static String sStr;
static transient int siInt;
static final String sfString = "sfString";
static final int sfi = 1;
static final transient String sftStr = "sftStr";
}
@Getter
- 自动产生 getter
- static 修饰的无法生产对应的Get方法
import lombok.Getter;
/**
* @author comlong
* @create 2021-07-11 15:50
* @Description 自动产生 getter
* static 修饰的无法生产对应的Get方法
*/
@Getter
public class GetterInfo {
/**
* 以下10个均可生成对应的Get方法
*/
public String puString;
String string;
protected int proInt;
private Integer priInt;
private char priChar;
transient int tiInt;
final int inum = 100;
final char ch = 'c';
final String fString = "fString";
final transient int ftiInt = 1020;
/**
* 以下均不能生成对应的Get方法
*/
static int num;
static String sStr;
static transient int siInt;
static final String sfString = "sfString";
static final int sfi = 1;
static final transient String sftStr = "sftStr";
}
@NoArgsConstructor
- 自动生成空参构造器
import lombok.NoArgsConstructor;
/**
* @author comlong
* @create 2021-07-11 16:35
* @Description 添加空参构造器
*/
@NoArgsConstructor
public class NoArgsConstructorInfo {
}
@AllArgsConstructor
- 生成一个包含所有参数的构造器,不包括static、final修饰的变量
import lombok.AllArgsConstructor;
/**
* @author comlong
* @create 2021-07-11 16:38
* @Description 生成一个包含所有参数的构造器,不包括static、final修饰的变量
*/
@AllArgsConstructor
public class AllArgsConstructorInfo {
/**
* 以下6个变量构成了 有参构造器
*/
public String puString;
String string;
protected int proInt;
private Integer priInt;
private char priChar;
transient int tiInt;
/**
* 以下不会在有参构造器中出现
*/
final int inum = 100;
final char ch = 'c';
final String fString = "fString";
final transient int ftiInt = 1020;
static int num;
static String sStr;
static transient int siInt;
static final String sfString = "sfString";
static final int sfi = 1;
static final transient String sftStr = "sftStr";
/**
*
* public AllArgsConstructorInfo(String puString, String string, int proInt, Integer priInt, char priChar, int tiInt) {
* this.puString = puString;
* this.string = string;
* this.proInt = proInt;
* this.priInt = priInt;
* this.priChar = priChar;
* this.tiInt = tiInt;
* }
*/
}
@RequiredArgsConstructor
- 生成 一个构造器,构造器的参数列中只包含 final 修饰的且没有赋予初始值的变量。
import lombok.RequiredArgsConstructor;
/**
* @author comlong
* @create 2021-07-11 16:44
* @Description 生成 一个构造器,构造器的参数列中只包含 final 修饰的且没有赋予初始值的变量。
*/
@RequiredArgsConstructor
public class RequiredArgsConstructorInfo {
/**
* 以下4个会生成在有参构造器中
*/
final int inum;
final char ch;
final String fString;
final transient int ftiInt;
/**
//如果赋予了初始值,则不会生成在构造器中
final int inum = 100;
final char ch = 'c';
final String fString = "fString";
final transient int ftiInt = 1020;
*/
/**
* 以下均不会生成在有参构造器中
*/
public String puString;
String string;
protected int proInt;
private Integer priInt;
private char priChar;
transient int tiInt;
static int num;
static String sStr;
static transient int siInt;
static final String sfString = "sfString";
static final int sfi = 1;
static final transient String sftStr = "sftStr";
/**
* public RequiredArgsConstructorInfo(int inum, char ch, String fString, int ftiInt) {
* this.inum = inum;
* this.ch = ch;
* this.fString = fString;
* this.ftiInt = ftiInt;
* }
*/
}
@ToString
- 自动重写 toString() 方法
- static修饰的内容无法重写在toString()中
import lombok.ToString;
/**
* @author comlong
* @create 2021-07-11 16:00
* @Description 自动重写 toString() 方法
* @ToString static修饰的内容无法在toString打印。
*/
@ToString
public class ToStringInfo {
/**
* 以下10个均可生成在toString()方法
*/
public String puString;
String string;
protected int proInt;
private Integer priInt;
private char priChar;
transient int tiInt;
final int inum = 100;
final char ch = 'c';
final String fString = "fString";
final transient int ftiInt = 1020;
/**
* 以下均不能生成在toString()方法
*/
static int num;
static String sStr;
static transient int siInt;
static final String sfString = "sfString";
static final int sfi = 1;
static final transient String sftStr = "sftStr";
/**
* ToStringInfo(puString=null, string=null, proInt=0, priInt=null, priChar= , inum=0, ch= , fString=fString)
*
* public String toString() {
* StringBuilder var10000 = (new StringBuilder()).append("ToStringInfo(puString=").append(this.puString).append(", string=").append(this.string).append(", proInt=").append(this.proInt).append(", priInt=").append(this.priInt).append(", priChar=").append(this.priChar).append(", tiInt=").append(this.tiInt).append(", inum=");
* this.getClass();
* var10000 = var10000.append(100).append(", ch=");
* this.getClass();
* var10000 = var10000.append('c').append(", fString=");
* this.getClass();
* var10000 = var10000.append("fString").append(", ftiInt=");
* this.getClass();
* return var10000.append(1020).append(")").toString();
* }
*/
}
@Value
- 将非final、未赋予初始化值的变量添加上final修饰符
- 生成 一个构造器,构造器的参数列中只包含 final 修饰的且没有赋予初始值的变量。
import lombok.Value;
/**
* @author comlong
* @create 2021-07-11 16:59
* @Description 将非final、未赋予初始化值的变量添加上final修饰符
* 生成 一个构造器,构造器的参数列中只包含 final 修饰的且没有赋予初始值的变量。
*/
@Value
public class ValueInfo {
/**
* 以下10个字段会生成有参构造器
*/
public String puString;
String string;
protected int proInt;
private Integer priInt;
private char priChar;
transient int tiInt;
private final int inum;
private final char ch;
final String fString;
protected final transient int ftiInt;
// 以下不在生成有参构造器的参数列表中
/**
// 赋予了初始值,则不在生成有参构造器的参数列表中
private Integer priInt = 10;
protected int proInt = 100;
final int inum = 100;
final char ch = 'c';
final String fString = "fString";
final transient int ftiInt = 1020;
*/
static int num;
static String sStr;
static transient int siInt;
static final String sfString = "sfString";
static final int sfi = 1;
static final transient String sftStr = "sftStr";
/**
* public ValueInfo(String puString, String string, int proInt, Integer priInt, char priChar, int tiInt, int inum, char ch, String fString, int ftiInt) {
* this.puString = puString;
* this.string = string;
* this.proInt = proInt;
* this.priInt = priInt;
* this.priChar = priChar;
* this.tiInt = tiInt;
* this.inum = inum;
* this.ch = ch;
* this.fString = fString;
* this.ftiInt = ftiInt;
* }
*/
}
@EqualsAndHashCode
- 自动生成 equals(Object other) 和 hashcode() 方法
- 包括所有非静态变量和非 transient 的变量
- 可以使用@EqualsAndHashCode(exclude = “excludeFiled” ) 排除某些字段
@Data
- 相当于 @Getter @Setter @RequiredArgsConstructor @ToString @EqualsAndHashCode
- 经常与 @AllArgsConstructor、@NoArgsConstructor、@Builder一起使用
@Builder
@Builder 让您自动生成使您的类可以使用以下代码实例化所需的代码:
Person.builder()
.name("Adam Savage")
.city("San Francisco")
.job("Mythbusters")
.job("Unchained Reaction")
.build();
@Log,@Slf4j
标注于class上,然后就会有一个静态 final log字段,按照您使用的日志记录框架的常用规定方式进行初始化,然后您可以使用它来编写日志语句。
使用 @Log等同于在class中写了这个:
private static final java.util.logging.Logger log = java.util.logging.Logger.getLogger(LogExample.class.getName());
使用:
import lombok.extern.java.Log;
import lombok.extern.slf4j.Slf4j;
@Log
public class LogExample {
public static void main(String... args) {
log.severe("Something's wrong here");
}
}
@Slf4j
public class LogExampleOther {
public static void main(String... args) {
log.error("Something else is wrong here");
}
}