JavaRush /Java Blog /Random-TW /註釋。第二部分。龍目島

註釋。第二部分。龍目島

在 Random-TW 群組發布
註釋。第一部分,有點無聊 在這一部分中,我決定談談 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