文章目录
一、添加依赖
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.20</version>
</dependency>
二、官网文档
https://projectlombok.org/features/all
三、常用注解
@Cleanup
@Cleanup InputStream in = new FileInputStream("some/file");
当代码加上该注解后,程序会在in的作用域最末尾调用 in.close()。此调用保证通过 try/finally 构造运行。如果您要清理的对象类型没有close()方法,但有其他一些无参数方法,则可以像这样指定此方法的名称:
@Cleanup("dispose") org.eclipse.swt.widgets.CoolBar bar =
new CoolBar(parent, 0);
以下两段代码作用等同
import lombok.Cleanup;
import java.io.*;
public class CleanupExample {
public static void main(String[] args) throws IOException {
@Cleanup InputStream in = new FileInputStream(args[0]);
@Cleanup OutputStream out = new FileOutputStream(args[1]);
byte[] b = new byte[10000];
while (true) {
int r = in.read(b);
if (r == -1) break;
out.write(b, 0, r);
}
}
}
import java.io.*;
public class CleanupExample {
public static void main(String[] args) throws IOException {
InputStream in = new FileInputStream(args[0]);
try {
OutputStream out = new FileOutputStream(args[1]);
try {
byte[] b = new byte[10000];
while (true) {
int r = in.read(b);
if (r == -1) break;
out.write(b, 0, r);
}
} finally {
if (out != null) {
out.close();
}
}
} finally {
if (in != null) {
in.close();
}
}
}
}
@Getter and @Setter
我们可以使用@Getter和/@Setter,让 lombok 自动生成默认的 getter/setter方法。
-
在属性上添加@Getter和/或@Setter注释。只生成该属性的getter/setter方法。
-
在类上添加@Getter和/或@Setter注释。相当对该类中的所有非静态字段进行了注释。
-
我们可以使用 AccessLevel.NONE访问级别来排除某些属性,不让他生成getter/setter方法
-
生成的 getter/setter方法默认是public的。我们也可以使用AccessLevel.PUBLIC、AccessLevel.PROTECTED、AccessLevel.PACKAGE、AccessLevel.PRIVATE的来指定访问级别
以下两段代码效果等同
import lombok.AccessLevel;
import lombok.Getter;
import lombok.Setter;
public class GetterSetterExample {
@Getter
@Setter
private int age = 10;
@Setter(AccessLevel.PROTECTED)
private String name;
@Override
public String toString() {
return String.format("%s (age: %d)", name, age);
}
}
public class GetterSetterExample {
private int age = 10;
private String name;
@Override
public String toString() {
return String.format("%s (age: %d)", name, age);
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
protected void setName(String name) {
this.name = name;
}
}
@ToString
任何类定义都可以使用注释@ToString来让 lombok 生成toString()方法的实现。默认情况下,它会按顺序打印您的类名以及每个字段,并以逗号分隔。
下面两段代码 效果等同
import lombok.ToString;
import java.awt.*;
@ToString
public class ToStringExample {
private static final int STATIC_VAR = 10;
private String name;
private Shape shape = new Square(5, 10);
private String[] tags;
@ToString.Exclude
private int id;
public String getName() {
return this.name;
}
@ToString(callSuper = true, includeFieldNames = 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.awt.*;
import java.util.Arrays;
public class ToStringExample {
private static final int STATIC_VAR = 10;
private String name;
private Shape shape = new Square(5, 10);
private String[] tags;
private int id;
public String getName() {
return this.name;
}
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 String toString() {
return "Square(super=" + super.toString() + ", width=" + this.width + ", height=" + this.height + ")";
}
}
@Override
public String toString() {
return "ToStringExample(" + this.getName() + ", " + this.shape + ", " + Arrays.deepToString(this.tags) + ")";
}
}
@EqualsAndHashCode
@NoArgsConstructor
定做构造函数:生成不带参数的构造函数
@AllArgsConstructor
定做构造函数:生成带全部参数的构造函数
@RequiredArgsConstructor (待补充)
@Data(待补充)
现在全部在一起:@ToString, @EqualsAndHashCode, @Getter在所有字段和@Setter所有非最终字段上的快捷方式,以及 @RequiredArgsConstructor!
@Value(待补充)
不可变类变得非常容易。
@Builder(待补充)
…而 Bob 是你的叔叔:用于创建对象的无障碍花哨 API!
@SneakyThrows(待补充)
大胆地抛出之前没有人抛出过的已检查异常!
@Synchronized(待补充)
synchronized 做得对:不要暴露你的锁。
@With(待补充)
不可变的“setter” - 创建一个克隆但具有一个更改字段的方法。
@Getter(lazy=true)(待补充)
懒惰是一种美德!
@Log(待补充)
船长日志,星历 24435.7:“那条线又是什么?”