Annotasiyalar. Birinci hissə, bir az darıxdırıcı , Mənbə annotasiyalarının tanınmış nümayəndəsi kimi Lombok kitabxanasına toxunmaq qərarına gəldim. Növbəti məqalədə Runtime annotasiyaları ilə. Bir zamanlar bir java proqramçısı var idi, o, hər gün adi kod yazır, məsələn:
Ümid edirəm ki, siz, oxucu, maraqlı tapdınız, çünki aşağıda qısa bir giriş və təfərrüatlara keçidlər var. Lombok həmçinin nəsli fərdiləşdirmək imkanı verir; bütün alıcılar, təyin edənlər və ya hashkodların həmişə fərqli şəkildə yaradılmasına ehtiyac yoxdur. Buna görə də ayrıca annotasiyalar var (mən hesab edirəm ki, onların çoxunun təsvirə ehtiyacı yoxdur) @Getter/@Setter @ToString @EqualsAndHashCode @NoArgsConstructor, @RequiredArgsConstructor və @AllArgsConstructor @Log Bunlar ən tipik olanlardır, bütün dəsti görmək olar. burada var və val xüsusi diqqətə layiqdir. Belə yazmaq olar:
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 +
'}';
}
}
Bu, yalnız 2 sahəyə malik tipik bir sinifdir (lakin bəzən 10-15-dən çox sahə var). Bəli, əlbəttə ki, bütün bunları IDE-də yaratmaq olar, amma lənətə gəlir ki, yer tutur. Əgər 15-20 sahə varsa, onların hamısına alıcılar, tənzimləyicilər, konstruktorlar lazımdır... Bütün bunlar arasında gözə görünməyən bir-iki üsul asanlıqla itirə bilər. Belə bir proqramçıya daha tez və daha az yazmağa necə kömək edə bilərəm? Lombok. Düz istidə, eyni sinif, lakin Lombok istifadə edərək:
package lombok;
@Data
public class Chelovek {
private String name;
private int age;
}
Bəli, hamısı budur. Əla? @Data annotasiyası nə edəcək ? Kompilyasiya mərhələsində o, bütün sahələr üçün alıcılar/tənzimləyicilər yaradacaq, toString və bərabərləri və hashCode-u standartlara uyğun olaraq yenidən təyin edəcək. Siz IDE-də plagin quraşdıra bilərsiniz və o, hələ yaradılmamış bütün üsulları görəcək.
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);
}
}
Bu niyə lazımdır? Məsələn, bizdə RandomAccessFileChannel sinfi var.Bunu niyə belə yazmalıyıq:
RandomAccessFileChannel channel = new RandomAccessFileChannel();
Mümkünsə belə:
var channel2 = new RandomAccessFileChannel();
Məncə, bu heç də həmişə məqbul deyil. Məsələn, pis xəritəni qaytaran pis metodumuz var:
public static Map<List<Set<Integer>>, Set<List<String>>> evilMap(){
return new HashMap<>();
}
bunu belə adlandırsanız:
Map<List<Set<Integer>>, Set<List<String>>> listSetMap = evilMap();
Nə ilə işlədiyimiz az-çox aydındır. Zəng belə olarsa:
var listSetMap = evilMap();
onda kim evilMap() funksiyasının nə qaytardığını bilir və siz metodun özünə baxana qədər bilməyəcəksiniz. Mənbələrə nəzər salmaq nəyə lazımdır? Ümumiyyətlə, bununla daha diqqətli olmaq lazımdır. Eksperimental mövzu: Burada annotasiyaları qeyd etmək istərdim: @UtilityClass O, şəxsi konstruktor yaradır və ora bir istisna atır (əksdən çirklənmiş əllər bura daxil olmasın). Və çox gözəl dərsin əvvəlində bizə faydalı metodların olduğunu söyləyir. @Delegate Nümayəndə heyəti modelini həyata keçirir. Yalnız bəzi metodlarda dəyişiklik edərkən nəyisə başqa bir sinfə həvalə edən bir sinifiniz varsa, bu annotasiya sizi metodları təkrarlamaqdan xilas edəcək + onları izləyəcək. Metod silinərsə və ya əlavə olunarsa, o bunu görəcək. Eksperimental annotasiya mövzusu GITHUB Rəsmi veb-saytı IDE-nin lombok ilə normal işləməsi və üsulları mövcud olmayan kimi vurğulamaması üçün siz plaqini quraşdırmalısınız. Rəsmi veb-saytda hər bir IDE üçün plagini necə qoşmağı görə biləcəyiniz quraşdırma bölməsi var.Gördüyünüz kimi Lombok populyardır. >5000 ulduz və >1000 çəngəl. Bahar dərslərində lombokdan istifadə edir. Layihənizdə bir yay varsa, onu axtarın, bəlkə lomboku çəkdi, sadəcə bilmirsiniz.
GO TO FULL VERSION