JavaRush /Java Blogu /Random-AZ /Annotasiyalar. İkinci hissə. Lombok

Annotasiyalar. İkinci hissə. Lombok

Qrupda dərc edilmişdir
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:
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.
Annotasiyalar.  İkinci hissə.  Lombok - 1
Ü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;

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.
Şərhlər
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION