JavaRush /Java 博客 /Random-ZH /注释。第二部分。龙目岛

注释。第二部分。龙目岛

已在 Random-ZH 群组中发布
注释。第一部分,有点无聊 在这一部分中,我决定谈谈 Lombok 库作为源注释的著名代表。下一篇文章中带有运行时注释。从前有一个java程序员,他每天都会写一些普通的代码,比如这样:
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中安装一个插件,它会看到所有尚未创建的方法。
注释。 第二部分。 龙目岛 - 1
我希望读者您会觉得它很有趣,因为接下来会有一个简短的介绍和详细信息的链接。Lombok 还提供了自定义生成的机会;并非所有 getter、setter 或 hashcode 都必须以不同方式生成。因此,有单独的注解(我认为很多都不需要描述) @Getter/@Setter @ToString @EqualsAndHashCode @NoArgsConstructor、@RequiredArgsConstructor 和 @AllArgsConstructor @Log 这些是最典型的,整套可以在这里查看 var 和 val 值得特别注意。可以这样写:
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。如果你的项目中有一个弹簧,寻找它,也许它拉起了龙目岛,只是你不知道。
评论
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION