CodeGym /Java 博客 /随机的 /注释。第 2 部分. 龙目岛
John Squirrels
第 41 级
San Francisco

注释。第 2 部分. 龙目岛

已在 随机的 群组中发布
注释。第 1 部分 — 有点无聊 在这一部分中,我决定接触一下 Lombok 库,因为它是源代码注释的著名代表。我将在下一篇文章中讨论运行时注释。 注释。 第 2 部分. 龙目岛 - 1从前,有一个Java程序员。她每天都会写普通的代码,比如这样:
package lombok;

public class Person {
    private String name;
    private int age;

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public Person() {
    }

    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;

        Person person = (Person) o;

        if (age != person.age) return false;
        return name != null ? name.equals(person.name) : person.name == null;
    }

    @Override
    public int hashCode() {
        int result = name != null ? name.hashCode() : 0;
        result = 31 * result + age;
        return result;
    }

    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}
这个类很普通——只有2个字段(毕竟,有时会有超过10-15个字段)。当然,这一切都可以在IDE中生成。但该死的,它取代了它的位置。如果有 15-20 个字段,每个字段都需要 getter、setter、constructor...在所有这些中,还有一些肉眼看不见的其他方法很容易丢失。我们如何帮助这位程序员写得更快、更少?龙目岛。与你一起出油锅,一起入火。这是同一个类,但现在我们使用 Lombok:
package lombok;

@Data
public class Person {
    private String name;
    private int age;
}
就这样。很酷吧?@Data注解有什么作用?在编译期间,此注释会为所有字段生成 getter/setter,并根据标准规则覆盖 toString()、equals() 和 hashCode()。您可以在 IDE 中安装该插件。它将看到尚未创建的任何方法。 注释。 第 2 部分. 龙目岛 - 2至此,我希望您,我的读者,已经感兴趣,因为接下来将是一个简短的介绍,并附有详细信息的链接。Lombok 还允许您自定义代码生成,例如并不总是需要所有 getter 和 setter,或者您可能需要不同的算法来生成哈希码。为了实现这一点,有单独的注释(我认为其中很多都不需要描述): @Getter/@Setter、@ToString、@EqualsAndHashCode、@NoArgsConstructor、@RequiredArgsConstructor 和 @AllArgsConstructor、@Log 这些是最重要的常见的。整套作品可以在这里 看到。特别注意 var 和 val。这意味着您可以编写如下代码:
package lombok;

import lombok.experimental.var;

@Data
public class Person {
    private String name;
    private int age;

    public static void main(String[] args) {
        var person = new Person();
        person.setAge(22);
        System.out.println(person);
    }
}
为什么这是必要的?例如,我们有一个 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 很受欢迎:> 5,000 个星和 > 1,000 个分叉。Spring 在其类中使用 lombok。如果你的项目中有 Spring,请看一下——它可能在你不知情的情况下引入了 lombok。
评论
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION