CodeGym/Blog Java/rawak/Anotasi. Bahagian 2. Lombok
John Squirrels
Tahap
San Francisco

Anotasi. Bahagian 2. Lombok

Diterbitkan dalam kumpulan
Anotasi. Bahagian 1 — sedikit membosankan Dalam bahagian ini, saya memutuskan untuk menyentuh perpustakaan Lombok, kerana ia merupakan wakil terkenal anotasi kod sumber. Saya akan menangani anotasi masa jalan dalam artikel seterusnya. Anotasi.  Bahagian 2. Lombok - 1Pada suatu masa dahulu, terdapat seorang pengaturcara Java. Setiap hari dia menulis kod biasa, contohnya, seperti ini:
package lombok;

public class Person {
    private String name;
    private int age;

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public Person() {
    }

    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;

        Person person = (Person) o;

        if (age != person.age) return false;
        return name != null ? name.equals(person.name) : person.name == null;
    }

    @Override
    public int hashCode() {
        int result = name != null ? name.hashCode() : 0;
        result = 31 * result + age;
        return result;
    }

    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}
Kelas ini biasa — hanya 2 medan (lagipun, kadangkala terdapat lebih daripada 10-15 medan). Sudah tentu, semua ini boleh dijana dalam IDE. Tetapi sial, itu mengambil tempatnya. Jika terdapat 15-20 medan, setiap satu daripadanya memerlukan getter, setter, pembina... Di antara semua ini, beberapa kaedah lain, yang tidak dapat dilihat oleh mata, boleh hilang dengan mudah. Bagaimanakah kami membantu pengaturcara ini menulis dengan lebih pantas dan kurang? Lombok. Keluar dari kuali dan ke dalam api bersama anda. Berikut adalah kelas yang sama, tetapi kini kami menggunakan Lombok:
package lombok;

@Data
public class Person {
    private String name;
    private int age;
}
Itu sahaja. Sejuk, ya? Apakah yang dilakukan oleh anotasi @Data ? Semasa penyusunan, anotasi ini menjana getter/setter untuk semua medan dan menggantikan toString(), equals(), dan hashCode() mengikut peraturan standard. Anda boleh memasang pemalam dalam IDE. Ia akan melihat mana-mana kaedah yang belum dibuat. Anotasi.  Bahagian 2. Lombok - 2Pada ketika ini, saya harap anda, pembaca saya, telah berminat, kerana apa yang berikut akan menjadi pengenalan ringkas dengan pautan ke butiran. Lombok juga membolehkan anda menyesuaikan penjanaan kod, cth semua getter dan setter tidak selalu diperlukan, atau anda mungkin memerlukan algoritma yang berbeza untuk menjana kod cincang. Untuk mencapai ini, terdapat anotasi berasingan (saya rasa kebanyakannya tidak memerlukan penerangan): @Getter/@Setter, @ToString, @EqualsAndHashCode, @NoArgsConstructor, @RequiredArgsConstructor dan @AllArgsConstructor, @Log Ini adalah yang paling biasa. Keseluruhan set boleh dilihat di sini . Beri perhatian khusus kepada var dan val. Ini bermakna anda boleh menulis kod seperti ini:
package lombok;

import lombok.experimental.var;

@Data
public class Person {
    private String name;
    private int age;

    public static void main(String[] args) {
        var person = new Person();
        person.setAge(22);
        System.out.println(person);
    }
}
Mengapa ini perlu? Sebagai contoh, kami mempunyai kelas RandomAccessFileChannel. Mengapa kita mahu menulis kod seperti ini?
RandomAccessFileChannel channel = new RandomAccessFileChannel();
Jika kita boleh melakukan ini?
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();
Kemudian lebih kurang jelas apa yang kita kerjakan. Jika panggilan adalah seperti ini:
var listSetMap = evilMap();
maka hanya syaitan yang tahu apa evilMap() akan kembali ke sana, dan sehingga anda melihat kaedah itu sendiri, anda tidak tahu. Mengapa perlu berjalan di sekitar fail sumber? Secara umum, anda perlu berhati-hati dengan ini. Cawangan percubaan: Di sini saya ingin menyebut anotasi @UtilityClass . Ia mencipta pembina peribadi yang melemparkan pengecualian (tangan kecil yang kotor tidak menggunakan refleksi untuk campur tangan di sana). Dan ia sangat cantik pada permulaan kelas — ia memberitahu kita bahawa terdapat kaedah utiliti. Anotasi @Delegate melaksanakan corak perwakilan. Katakan anda mempunyai kelas yang mewakilkan sesuatu kepada kelas lain dan anda membuat perubahan pada beberapa kaedah sahaja — anotasi ini akan menyelamatkan anda daripada menduplikasi kaedah dan ia akan menjejakinya. Jika anda mengalih keluar atau menambah kaedah, anotasi ini akan diperhatikan. Cawangan anotasi percubaan Laman web rasmi GitHub Untuk IDE berfungsi dengan betul dengan lombok dan tidak menyerlahkan kaedah sebagai tidak wujud, anda mesti memasang pemalam. Laman web rasmi mempunyai bahagian persediaan di mana anda boleh melihat cara menyambung pemalam untuk setiap IDE. Seperti yang anda lihat, lombok popular: >5,000 bintang dan >1,000 garpu. Spring menggunakan lombok dalam kelasnya. Jika anda mempunyai Spring dalam projek anda, sila lihat — ia mungkin telah menarik lombok masuk tanpa pengetahuan anda.
Komen
  • Popular
  • Baru
  • Tua
Anda mesti log masuk untuk meninggalkan ulasan
Halaman ini tidak mempunyai sebarang ulasan lagi