JavaRush /Java Blog /Random-ID /Perpustakaan Lombok
Сергей
Level 40
Москва

Perpustakaan Lombok

Dipublikasikan di grup Random-ID
Perpustakaan Lombok mengurangi jumlah kode yang ditulis, sehingga meningkatkan keterbacaan. Perpustakaan Lombok - 1Contoh penggunaan. Kelas reguler Persondengan tiga bidang:
public class Person {

    private String name;
    private int age;
    private Cat cat;

    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;
    }

    public Cat getCat() {
        return cat;
    }

    public void setCat(Cat cat) {
        this.cat = cat;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Person person = (Person) o;
        return age == person.age &&
                Objects.equals(name, person.name) &&
                Objects.equals(cat, person.cat);
    }

    @Override
    public int hashCode() {
        return Objects.hash(name, age, cat);
    }

    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", cat=" + cat +
                '}';
    }
}
Sama halnya dengan Lombok
@Data
public class Person {
    private String name;
    private int age;
    private Cat cat;
}
Kami menghapus banyak kode, namun semua metode dan pengubah tetap ada. Bagaimana itu bekerja. Lombok menghasilkan kode pada waktu kompilasi. Perpustakaan lombok sendiri tidak ada saat runtime. Penggunaannya tidak menambah ukuran program. Saat menggunakan Lombok, kode sumber kami tidak akan berupa kode Java yang valid. Oleh karena itu, Anda perlu menginstal plugin untuk IDE, jika tidak, lingkungan pengembangan tidak akan memahami apa yang sedang dihadapinya. Lombok mendukung semua IDE Java utama. Integrasinya berjalan mulus. Semua fungsi seperti "tampilkan penggunaan" dan "lanjutkan ke implementasi" terus berfungsi seperti sebelumnya, membawa Anda ke bidang/kelas yang sesuai. Jadi, untuk kelas sederhana Anda bisa menggunakan anotasi @Data. @Data- menghasilkan konstruktor, pengambil, penyetel, metode equals,, hashCode. toStringUntuk membuat objek tidak dapat diubah, ada @Value. @Value- menghasilkan konstruktor, hanya pengambil, metode equals, hashCode, toString. Dan juga melakukan semua bidang privatedan final.
@Value
public class Cat {
    String name;
    int age;
    Person person;
}
@WithAnotasi dan .berfungsi dengan baik dengan kelas yang tidak dapat diubah @Builder.
@With
@Builder
@Value
public class Cat {
    String name;
    int age;
    Person person;
}
Jika kita ingin mengubah bidang objek yang tidak dapat diubah, maka kita perlu membuat tiruan dari objek tersebut dengan satu parameter yang diubah. @With- menambahkan metode untuk setiap bidang yang membuat tiruan objek dengan satu bidang yang diubah.
Cat anotherCat = cat.withName("Vasya");
anotherCat- objek baru yang nilai bidangnya sama dengan cat, kecuali bidang name. @Builder- menghasilkan metode yang kita gunakan untuk menginisialisasi objek di sepanjang rantai. Ini berguna ketika kita tidak ingin menggunakan konstruktor dengan semua parameter (Jika kelas kita tidak dapat diubah, maka ia memiliki konstruktor tunggal dengan semua parameter).
Cat cat = Cat.builder()
                .name("Мурка")
                .age(3)
                .person(person)
                .build();
Panggilan metode siklik Jika objek memiliki komunikasi dua arah, mis. referensi satu sama lain, maka penggunaan metode tersebut toStringakan equalsmenyebabkan hashCodekesalahan StackOverflowError. Karena akan ada panggilan siklik ke metode objek bersarang. Kode ini akan menghasilkan kesalahan:
public class Main {

    public static void main(String[] args) {
        Person person = new Person();

        Cat cat = Cat.builder()
                .name("Мурка")
                .age(3)
                .person(person)
                .build();

        person.setName("Ivan");
        person.setAge(26);
        person.setCat(cat);

        System.out.println(person);
        System.out.println(cat);
    }
}
Solusi untuk masalah ini adalah memutus panggilan siklik dengan menghapus field dari metode. @ToString.Exclude- Kecualikan bidang dalam suatu metode toString @EqualsAndHashCode.Exclude- Kecualikan bidang dalam suatu metode equalsdanhashCode
@Value
@With
@Builder
public class Cat {
    String name;
    int age;
    @ToString.Exclude
    @EqualsAndHashCode.Exclude
    Person person;
}
Beberapa anotasi yang lebih berguna @Slf4j- menambahkan logger ke kelas @SneakyThrows- membuat pengecualian yang dicentang tidak dicentang
@Slf4j
public class Main {

    @SneakyThrows
    public static void main(String[] args) {
        log.info("start");
        Files.readAllBytes(Paths.get(""));
    }
}
Beri anotasi satu per satu Jika karena alasan tertentu Anda hanya memerlukan metode tertentu
@NoArgsConstructor //добавляет конструктор без аргументов
@AllArgsConstructor //добавляет конструктор со всеми параметрами
@RequiredArgsConstructor //добавляет конструктор для final полей
@Getter //добавляет геттеры для всех параметров класса
@Setter //добавляет сеттеры для всех параметров класса
@EqualsAndHashCode //добавляет реализации методов equals и hashCode
@ToString //добавляет реализацию метода toString
@FieldDefaults(level = AccessLevel.PRIVATE, makeFinal = true) //делает все поля private и final
Perpustakaan Lombok - 2<h2>Kesimpulan</h2>Ini hanyalah anotasi lombok dasar, namun merupakan anotasi yang paling umum digunakan dan memiliki pengaruh paling besar. Anda juga tidak boleh terlalu terbawa dengan pembuatan kode. <h2>Tautan</h2>
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION