Lombok 使用(maven+idea的环境下)
官网对Lombok的解释:
Project Lombok是一个java库,可以自动插入编辑器并构建工具,为您的java增添色彩。
永远不要再写另一个getter或equals方法,使用一个注解,您的类具有一个功能齐全的构建器,自动化您的日志记录变量等等。
官网网址为:https://projectlombok.org/
一、编译 javac(https://projectlombok.org/)
在使用任何javac(版本1.6 - 1.8)编译时,只需将lombok放在类路径上:javac -cp lombok.jar ....
JDK 9
对于JDK9的支持,如果你尚未模块化自己的项目(还没有module-info.java),则从版本1.16.20开始包含在lombok中。 正常使用lombok:javac -cp lombok.jar ...
如果你模块化自己的项目(你已经编写了一个module-info.java文件),那么在边缘版本中可以获得对JDK9的支持。 使用它:javac -cp lombok.jar -p lombok.jar ...
请注意,您必须将lombok添加到module-info.java文件中:
module myapp {
requires static lombok;
}
确保'static'部分不会在运行时出现lombok。
二、maven依赖(https://projectlombok.org/setup/maven)
1、添加Maven依赖
为了能在工程中使用Lombok,工程中需要引入Lombok的Maven依赖
<dependencies>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.6</version>
<scope>provided</scope>
</dependency>
</dependencies>
2、Delomboking:Lombok Maven插件
官方推荐使用这个maven插件来delombok。 如果要在应用lombok之后在源上运行源分析工具,或者如果要生成javadoc,这个插件很有用。
三、idea(https://projectlombok.org/setup/intellij)
Jetbrains IntelliJ IDEA编辑器与lombok兼容。
添加Lombok IntelliJ插件以添加对IntelliJ的lombok支持:
(1)转到File > Settings > Plugins
(2)单击Browse repositories ...
(3)搜索Lombok插件
(4)单击“Install plugin”
(5)重启IntelliJ IDEA
四、使用(https://projectlombok.org/features/all)
详细使用教程可以看上面网址,这里简单介绍一下常见注解的使用。
1、@Data
这个注解的功能:
1) @ToString: 涉及类字段的相应 toString实现
2) @EqualsAndHashCode:涉及类字段的相应 equals和hashCode实现
3) @Getter:所有字段的getter
4) @Setter: 所有非final字段的setter
5) @RequiredArgsConstructor: 初始化所有final字段的构造函数,所有非final字段并没有使用@NonNull标记。(构造函数只包含final字段,不包含非final字段)
-
访问级别
使用生成的@Getter和@Setter都是public的。 要覆盖访问级别,请使用显式的@Setter和/或@Getter批注对字段或类进行批注。您还可以使用此批注(通过将其与AccessLevel.NONE组合)来完全禁止生成getter和/或setter。
-
存在方法则不会产生
如果类已经包含与通常生成的任何方法具有相同名称和参数计数的方法,则不会生成该方法,也不会发出警告或错误。例如,如果您已经有一个签名为equals(AnyType param)的方法,则不会生成equals方法,即使从技术上讲,由于具有不同的参数类型,它可能是完全不同的方法。同样的规则适用于构造函数(任何显式构造函数都会阻止@Data生成一个),以及toString,equals和所有getter和setter。您可以使用@ lombok.experimental.Tolerate标记任何构造函数或方法,以将它们隐藏在lombok中。
-
staticConstructor参数
@Data可以很好地处理字段的泛型参数。为了在为具有泛型的类构造对象时减少样板,可以使用staticConstructor参数来调用私有构造函数,以及返回新实例的静态方法。这样,javac将推断变量名称。因此,通过这样声明:@Data(staticConstructor =“of”)类Foo <T> {private T x;}您可以通过写入来创建Foo的新实例:Foo.of(5);而不必写:new Foo <Integer>(5);就是使用了Foo.of() 静态方法中调用了new Foo<Integer>。
Lombok写法
import lombok.AccessLevel;
import lombok.Setter;
import lombok.Data;
import lombok.ToString;
@Data public class DataExample {
private final String name;
@Setter(AccessLevel.PACKAGE) private int age;
private double score;
private String[] tags;
@ToString(includeFieldNames=true)
@Data(staticConstructor="of")
public static class Exercise<T> {
private final String name;
private final T value;
}
}
普通java写法
import java.util.Arrays;
public class DataExample {
private final String name;
private int age;
private double score;
private String[] tags;
public DataExample(String name) {
this.name = name;
}
public String getName() {
return this.name;
}
void setAge(int age) {
this.age = age;
}
public int getAge() {
return this.age;
}
public void setScore(double score) {
this.score = score;
}
public double getScore() {
return this.score;
}
public String[] getTags() {
return this.tags;
}
public void setTags(String[] tags) {
this.tags = tags;
}
@Override public String toString() {
return "DataExample(" + this.getName() + ", " + this.getAge() + ", " + this.getScore() + ", " + Arrays.deepToString(this.getTags()) + ")";
}
protected boolean canEqual(Object other) {
return other instanceof DataExample;
}
@Override public boolean equals(Object o) {
if (o == this) return true;
if (!(o instanceof DataExample)) return false;
DataExample other = (DataExample) o;
if (!other.canEqual((Object)this)) return false;
if (this.getName() == null ? other.getName() != null