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