CodeGym /Java Blog /Toto sisi /註釋。第 2 部分. 龍目島
John Squirrels
等級 41
San Francisco

註釋。第 2 部分. 龍目島

在 Toto sisi 群組發布
註釋。第 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