参考资料
import lombok.Data;
import lombok.experimental.Accessors;
@Data
@Accessors(fluent = true)
public class Student {
private String personId;
private String personName;
private String age;
private String address;
public static void main(String[] args) {
Student student = new Student();
// 不需要set
student.age("1");
student.address("地球");
// 不需要get
student.personId();
student.personName();
}
}
import lombok.Data;
import lombok.experimental.Accessors;
@Data
// 左右于类上,表示所有的属性都可以链式调用
@Accessors(chain = true)
public class Student {
private String personId;
private String personName;
// 作用于属性上,表示这个属性不链式调用
@Accessors(chain = false)
private String age;
private String address;
public static void main(String[] args) {
Student student = new Student();
student.setPersonId("1")
.setPersonName("贾飞天")
// age属性并不链式调用,所以不会返回对象本身
.setAge("10");
}
}
import lombok.Data;
import lombok.experimental.Accessors;
@Data
// 忽略属性前缀person和human,并且链式调用
@Accessors(prefix = {"person", "human"}, chain = true)
public class Student {
private String personId;
private String humanName;
private String age;
private String address;
public static void main(String[] args) {
Student student = new Student();
// 前缀person和human被忽略
student.setId("1")
.setName("贾飞天")
.setAge("18")
.setAddress("地球");
}
}
import lombok.Builder;
import lombok.ToString;
@Builder
@ToString
public class Student {
private String personId;
private String humanName;
private String age;
// 非 final 的字段可以有默认值
@Builder.Default
private String address = "地球";
public static void main(String[] args) {
Student student = Student.builder()
.personId("1")
.humanName("贾飞天")
.age("10")
// 没有创建address属性
.build();
System.out.println(student);
/*
因为我们使用@Builder.Default给address指定了默认值
Student(personId=1, humanName=贾飞天, age=10, address=地球)
*/
}
}
@Builder注解
使用,用于注解一个集合字段import lombok.Builder;
import lombok.Data;
import lombok.Singular;
import java.util.List;
@Builder
@Data
public class Student {
private String personId;
private String humanName;
private String age;
/**
* 属性名结尾不为 s ,
* 因此必须在@Singular注解中手动指定构建时使用的名称
*/
@Singular("address")
private List<String> addressList;
/**
* 属性名结尾为 s,
* 因此可以不手动指定构建时使用的名称,该名称为去掉s之后的属性名
*/
@Singular
private List<String> hobbys;
public static void main(String[] args) {
Student student = Student.builder()
.personId("110")
.humanName("贾飞天")
// 可以一个一个向集合中添加元素,无需创建一个集合
.address("地球").address("火星")
.hobby("吃饭").hobby("睡觉")
.build();
System.out.println(student);
/**
* Student(
* personId=110,
* humanName=贾飞天,
* age=null,
* addressList=[地球, 火星],
* hobbys=[吃饭, 睡觉]
* )
*/
}
}
java.io.Closeable
接口的对象有效import lombok.Cleanup;
import java.io.File;
import java.io.FileInputStream;
public static void main(String[] args) throws IOException {
@Cleanup FileInputStream inputStream = new FileInputStream(new File("D:\\test\\application.yml"));
byte[] bytes = inputStream.readAllBytes();
System.out.println(Arrays.toString(bytes));
}
编译后
⏹具体使用请参考这篇博客
SpringBoot 使用lombok的@RequiredArgsConstructor注解进行Bean注入
⏹定义一个工具类
public class StringExtension {
// 判断字符串是否为null或者空字符串
public static boolean isNullOrEmpty(String str) {
if (str == null || str.equals("")) {
return true;
}
return false;
}
// 判断不是null或空字符串
public static boolean isNotNullOrEmpty(String str) {
return !isNullOrEmpty(str);
}
}
⏹使用
import org.springframework.boot.CommandLineRunner;
import org.springframework.stereotype.Service;
import lombok.experimental.ExtensionMethod;
@Service
// 将StringExtension类添加到当前类中
@ExtensionMethod({ StringExtension.class })
public class Test implements CommandLineRunner {
@Override
public void run(String... args) throws Exception {
// 需要做判断的值
String value = null;
// 使用@ExtensionMethod注解之前的常规写法
boolean valueResult1 = StringExtension.isNullOrEmpty(value);
System.out.println(valueResult1); // true
/**
* 使用@ExtensionMethod注解之后,
* StringExtension类中的方法默认添加到当前类中,
* 虽然value的值为null,但是在编译的时候会进行处理,处理为常规写法这种形式
*/
boolean valueResult2 = value.isNullOrEmpty();
System.out.println(valueResult2); // true
}
}