JavaRush /Java blogi /Random-UZ /Izohlar. Ikkinchi qism. Lombok

Izohlar. Ikkinchi qism. Lombok

Guruhda nashr etilgan
Izohlar. Birinchi qism, biroz zerikarli , bu qismda men Lombok kutubxonasiga Manba izohlarining taniqli vakili sifatida tegishga qaror qildim. Keyingi maqolada Runtime izohlari bilan. Bir paytlar java dasturchisi bor edi, u har kuni oddiy kod yozardi, masalan:
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 atigi 2 ta maydonga ega odatiy sinf (lekin ba'zida 10-15 dan ortiq maydonlar mavjud). Ha, albatta, bularning barchasi IDE-da yaratilishi mumkin, ammo la'nati, u joy egallaydi. Agar 15-20 ta maydon bo'lsa, ularning hammasiga oluvchilar, setterlar, konstruktorlar kerak... Bularning barchasi orasida ko'zga ko'rinmaydigan yana bir nechta usullar osongina adashib qolishi mumkin. Bunday dasturchiga tezroq va kamroq yozishga qanday yordam berishim mumkin? Lombok. To'g'ridan-to'g'ri issiqda, xuddi shu sinf, lekin Lombok-dan foydalanish:
package lombok;

@Data
public class Chelovek {
    private String name;
    private int age;
}
Ha, hammasi shu. Ajoyibmi? @Data izohi nima qiladi ? Kompilyatsiya bosqichida u barcha maydonlar uchun qabul qiluvchilar/sozlovchilarni yaratadi, toString va standartlarga muvofiq teng va hashCode ni qayta aniqlaydi. IDE-ga plaginni o'rnatishingiz mumkin va u hali yaratilmagan barcha usullarni ko'radi.
Izohlar.  Ikkinchi qism.  Lombok - 1
Umid qilamanki, siz, o'quvchi, uni qiziqarli deb topdingiz, chunki quyida qisqacha kirish va tafsilotlarga havolalar mavjud. Lombok shuningdek, avlodni sozlash imkoniyatini beradi; barcha qabul qiluvchilar, sozlagichlar yoki xeshkodlar har doim ham boshqacha tarzda yaratilishi shart emas. Shuning uchun, alohida izohlar mavjud (menimcha, ularning ko'pchiligi tavsifga muhtoj emas) @Getter/@Setter @ToString @EqualsAndHashCode @NoArgsConstructor, @RequiredArgsConstructor va @AllArgsConstructor @Log Bular eng tipik, butun to'plamni ko'rish mumkin. Bu erda var va val alohida e'tiborga loyiqdir. Buni shunday yozish mumkin:
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 nima uchun kerak? Masalan, bizda RandomAccessFileChannel klassi bor.Xo'sh, nima uchun uni shunday yozishimiz kerak:
RandomAccessFileChannel channel = new RandomAccessFileChannel();
Agar iloji bo'lsa, shunday:
var channel2 = new RandomAccessFileChannel();
Menimcha, bu har doim ham qabul qilinishi mumkin emas. Misol uchun, bizda yomon xaritani qaytaradigan yomon usul mavjud:
public static Map<List<Set<Integer>>, Set<List<String>>> evilMap(){
    return new HashMap<>();
}
agar siz uni shunday chaqirsangiz:
Map<List<Set<Integer>>, Set<List<String>>> listSetMap = evilMap();
Biz nima bilan ishlayotganimiz ko'proq yoki kamroq aniq. Agar qo'ng'iroq shunday bo'lsa:
var listSetMap = evilMap();
keyin evilMap() nima qaytarayotganini kim biladi va siz usulning o'ziga qaramaguningizcha, siz bilmaysiz. Nima uchun manbalarni ko'rib chiqish kerak? Umuman olganda, bu bilan ko'proq ehtiyot bo'lish kerak. Eksperimental mavzu: Bu erda izohlarni qayd etmoqchiman: @UtilityClass U xususiy konstruktor yaratadi va u erda istisno qo'yadi (ko'zgudan iflos qo'llar bu erga kirmasligi uchun). Va darsning boshida u foydali usullar mavjudligini juda yaxshi aytadi. @Delegate Delegatsiya namunasini amalga oshiradi. Agar sizda faqat ba'zi usullarga o'zgartirishlar kiritib, biror narsani boshqa sinfga topshiradigan sinfingiz bo'lsa, bu izoh sizni usullarni takrorlashdan qutqaradi + ularni kuzatib boradi. Agar usul olib tashlansa yoki qo'shilsa, u buni sezadi. Eksperimental izohlar to'plami GITHUB rasmiy veb-sayti IDE lombok bilan normal ishlashi va usullarni mavjud emas deb belgilamasligi uchun siz plaginni o'rnatishingiz kerak. Rasmiy veb-saytda har bir IDE uchun plaginni qanday ulashni ko'rishingiz mumkin bo'lgan sozlash bo'limi mavjud.Ko'rib turganingizdek, Lombok mashhur. >5000 yulduz va >1000 vilka. Bahor o'z darslarida lombokdan foydalanadi. Agar sizning loyihangizda buloq bo'lsa, uni qidirib toping, ehtimol u lombokni tortib oldi, siz shunchaki bilmaysiz.
Izohlar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION