JavaRush /Blog Java /Random-MS /Anotasi. Bahagian kedua. Lombok

Anotasi. Bahagian kedua. Lombok

Diterbitkan dalam kumpulan
Anotasi. Bahagian pertama, sedikit membosankan Dalam bahagian ini, saya memutuskan untuk menyentuh perpustakaan Lombok sebagai wakil terkenal anotasi Sumber. Dengan anotasi Runtime dalam artikel seterusnya. Dahulu ada seorang pengaturcara java, setiap hari dia menulis kod biasa, contohnya ini:
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 +
                '}';
    }
}
Ini adalah kelas biasa dengan hanya 2 medan (tetapi kadangkala terdapat lebih daripada 10-15 medan). Ya, sudah tentu, semua ini boleh dijana dalam IDE, tetapi sial, ia mengambil ruang. Jika terdapat 15-20 medan, kesemuanya memerlukan getter, setter, constructor... Di antara semua ini, beberapa kaedah lain yang tidak dapat dilihat dengan mudah boleh hilang. Bagaimanakah saya boleh membantu pengaturcara sedemikian untuk menulis dengan lebih pantas dan kurang? Lombok. Terus ke panas, kelas yang sama tetapi menggunakan Lombok:
package lombok;

@Data
public class Chelovek {
    private String name;
    private int age;
}
Ya, itu sahaja. Sejuk? Apakah yang akan dilakukan oleh anotasi @Data ? Pada peringkat penyusunan, ia akan menjana getter/setter untuk semua medan, toString dan mentakrifkan semula sama dan Kod cincang mengikut piawaian. Anda boleh memasang pemalam dalam IDE dan ia akan melihat semua kaedah yang belum dibuat.
Anotasi.  Bahagian kedua.  Lombok - 1
Saya harap anda, pembaca, mendapati ia menarik, kerana yang berikut adalah pengenalan ringkas dan pautan ke butiran. Lombok juga menyediakan peluang untuk menyesuaikan penjanaan; semua getter, setter atau kod cincang tidak semestinya perlu dijana secara berbeza. Oleh itu, terdapat anotasi berasingan (saya rasa ramai daripada mereka tidak memerlukan penerangan) @Getter/@Setter @ToString @EqualsAndHashCode @NoArgsConstructor, @RequiredArgsConstructor dan @AllArgsConstructor @Log Ini adalah yang paling tipikal, keseluruhan set boleh dilihat di sini var dan val patut mendapat perhatian khusus. Adalah mungkin untuk menulis seperti ini:
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);
    }
}
Mengapa ini perlu? Sebagai contoh, kita mempunyai kelas RandomAccessFileChannel. Nah, mengapa kita perlu menulisnya seperti ini:
RandomAccessFileChannel channel = new RandomAccessFileChannel();
Kalau boleh begini:
var channel2 = new RandomAccessFileChannel();
Pada pendapat saya, ini tidak selalu boleh diterima. Sebagai contoh, kami mempunyai kaedah jahat yang mengembalikan peta jahat:
public static Map<List<Set<Integer>>, Set<List<String>>> evilMap(){
    return new HashMap<>();
}
jika anda memanggilnya seperti ini:
Map<List<Set<Integer>>, Set<List<String>>> listSetMap = evilMap();
Lebih kurang jelas apa yang sedang kami usahakan. Jika panggilan adalah seperti ini:
var listSetMap = evilMap();
maka siapa yang tahu apa yang evilMap() kembalikan, dan sehingga anda melihat kaedah itu sendiri, anda tidak akan tahu. Mengapa perlu bersusah payah mencari sumber? Secara umum, anda perlu lebih berhati-hati dengan ini. Benang eksperimen: Di sini saya ingin ambil perhatian anotasi: @UtilityClass Ia mencipta pembina peribadi dan membuang pengecualian di sana (supaya tangan yang kotor akibat pantulan tidak masuk ke sini). Dan sangat baik pada permulaan kelas ia memberitahu kita bahawa terdapat kaedah utiliti. @Delegate Melaksanakan corak delegasi. Jika anda mempunyai kelas yang mewakilkan sesuatu kepada kelas lain, sambil membuat perubahan hanya pada beberapa kaedah, anotasi ini akan menyelamatkan anda daripada kaedah pendua + akan menjejaki kaedah tersebut. Jika kaedah dialih keluar atau ditambah, dia akan menyedarinya. Benang anotasi eksperimen GITHUB Laman web rasmi Agar IDE berfungsi seperti biasa dengan lombok, dan tidak menyerlahkan kaedah sebagai tidak wujud, anda perlu memasang pemalam. Di laman web rasmi, terdapat bahagian persediaan di mana anda boleh melihat cara menyambung pemalam untuk setiap IDE. Seperti yang anda lihat, Lombok adalah popular. >5000 bintang dan >1000 garpu. Spring menggunakan lombok dalam kelasnya. Jika anda mempunyai mata air dalam projek anda, carilah, mungkin ia menarik lombok, anda tidak tahu.
Komen
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION