注释。第一部分,有点无聊 在这一部分中,我决定谈谈 Lombok 库作为源注释的著名代表。下一篇文章中带有运行时注释。从前有一个java程序员,他每天都会写一些普通的代码,比如这样:
我希望读者您会觉得它很有趣,因为接下来会有一个简短的介绍和详细信息的链接。Lombok 还提供了自定义生成的机会;并非所有 getter、setter 或 hashcode 都必须以不同方式生成。因此,有单独的注解(我认为很多都不需要描述) @Getter/@Setter @ToString @EqualsAndHashCode @NoArgsConstructor、@RequiredArgsConstructor 和 @AllArgsConstructor @Log 这些是最典型的,整套可以在这里查看 var 和 val 值得特别注意。可以这样写:
package lombok;
public class Chelovek {
private String name;
private int age;
public Chelovek(String name, int age) {
this.name = name;
this.age = age;
}
public Chelovek() {
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Chelovek chelovek = (Chelovek) o;
if (age != chelovek.age) return false;
return name != null ? name.equals(chelovek.name) : chelovek.name == null;
}
@Override
public int hashCode() {
int result = name != null ? name.hashCode() : 0;
result = 31 * result + age;
return result;
}
@Override
public String toString() {
return "Chelovek{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
这是一个典型的类,只有 2 个字段(但有时有超过 10-15 个字段)。是的,当然,这一切都可以在 IDE 中生成,但是该死的,它占用空间。如果有 15-20 个字段,那么它们都需要 getter、setter、constructor...在所有这些中,其他一些肉眼看不见的方法很容易丢失。我怎样才能帮助这样的程序员写得更快、更少呢?龙目岛。直接进入热区,同一类但使用 Lombok:
package lombok;
@Data
public class Chelovek {
private String name;
private int age;
}
是的,仅此而已。凉爽的?@Data注释会做什么 ?在编译阶段,它会根据标准生成所有字段的getters/setters、toString并重新定义equals和hashCode。你可以在IDE中安装一个插件,它会看到所有尚未创建的方法。
package lombok;
import lombok.experimental.var;
@Data
public class Chelovek {
private String name;
private int age;
public static void main(String[] args) {
var chelovek = new Chelovek();
chelovek.setAge(22);
System.out.println(chelovek);
}
}
为什么这是必要的?例如我们有RandomAccessFileChannel类,那么为什么我们需要这样写:
RandomAccessFileChannel channel = new RandomAccessFileChannel();
如果可能的话像这样:
var channel2 = new RandomAccessFileChannel();
在我看来,这并不总是可以接受的。例如,我们有一个邪恶的方法,它返回一个邪恶的地图:
public static Map<List<Set<Integer>>, Set<List<String>>> evilMap(){
return new HashMap<>();
}
如果你这样称呼它:
Map<List<Set<Integer>>, Set<List<String>>> listSetMap = evilMap();
我们正在做什么或多或少是清楚的。如果调用是这样的:
var listSetMap = evilMap();
那么谁知道邪恶Map()返回什么,除非你查看该方法本身,否则你不会知道。为什么要费力去查来源呢?一般来说,您需要更加小心这一点。 实验线程: 这里我想注意注释: @UtilityClass 它创建一个私有构造函数并在那里抛出一个异常(这样反射的脏手就不会进入这里)。在课程的开头,它很好地告诉我们有实用方法。 @Delegate 实现委托模式。如果您有一个类将某些内容委托给另一个类,同时仅对某些方法进行更改,则此注释将使您免于重复方法并且将跟踪它们。如果删除或添加某个方法,她会注意到。 实验注释线程 GITHUB 官网 为了让 IDE 能够正常与 lombok 配合工作,并且不将方法高亮为不存在,需要安装该插件。在官网上,有一个设置部分,你可以看到如何为每个IDE连接插件。正如你所看到的,Lombok很受欢迎。>5000 个星和 >1000 个分叉。Spring 在她的课程中使用 lombok。如果你的项目中有一个弹簧,寻找它,也许它拉起了龙目岛,只是你不知道。
GO TO FULL VERSION