JavaRush /Blog Java /Random-MS /Perpustakaan Lombok
Сергей
Tahap
Москва

Perpustakaan Lombok

Diterbitkan dalam kumpulan
Perpustakaan Lombok mengurangkan jumlah kod yang ditulis, meningkatkan kebolehbacaan. Perpustakaan Lombok - 1Contoh penggunaan. Kelas biasa 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 +
                '}';
    }
}
Perkara yang sama dengan lombok
@Data
public class Person {
    private String name;
    private int age;
    private Cat cat;
}
Kami mengalih keluar sekumpulan kod, bagaimanapun, semua kaedah dan pengubah suai kekal. Bagaimana ia berfungsi. Lombok menjana kod pada masa penyusunan. Perpustakaan lombok itu sendiri tiada dalam masa tayangan. Penggunaannya tidak meningkatkan saiz program. Apabila menggunakan Lombok, kod sumber kami tidak akan menjadi kod Java yang sah. Oleh itu, anda perlu memasang pemalam untuk IDE, jika tidak, persekitaran pembangunan tidak akan memahami perkara yang dihadapinya. Lombok menyokong semua IDE Java utama. Penyepaduan adalah lancar. Semua fungsi seperti "tunjukkan penggunaan" dan "pergi ke pelaksanaan" terus berfungsi seperti sebelumnya, membawa anda ke medan/kelas yang sesuai. Jadi, untuk kelas mudah anda boleh menggunakan anotasi @Data. @Data- menjana pembina, getter, setter, kaedah equals, hashCode, toString. Untuk menjadikan objek tidak berubah terdapat @Value. @Value- menjana pembina, hanya getter, kaedah 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 tidak berubah @Builder.
@With
@Builder
@Value
public class Cat {
    String name;
    int age;
    Person person;
}
Jika kita ingin menukar medan objek tidak berubah, maka kita perlu membuat klon objek ini dengan satu parameter yang diubah. @With- menambah kaedah untuk setiap medan yang membuat klon objek dengan satu medan yang diubah.
Cat anotherCat = cat.withName("Vasya");
anotherCat- objek baharu yang nilai medannya sama dengan cat, kecuali medan name. @Builder- menjana kaedah dengan mana kita memulakan objek di sepanjang rantai. Ini mudah apabila kita tidak mahu menggunakan pembina dengan semua parameter (Jika kelas kita tidak berubah, maka ia mempunyai satu pembina dengan semua parameter).
Cat cat = Cat.builder()
                .name("Мурка")
                .age(3)
                .person(person)
                .build();
Panggilan kaedah kitaran Jika objek mempunyai komunikasi dua arah, i.e. rujukan antara satu sama lain, kemudian menggunakan kaedah toStringakan equalsmembawa hashCodekepada ralat StackOverflowError. Kerana akan ada panggilan kitaran kepada kaedah objek bersarang. Kod ini akan mengakibatkan ralat:
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);
    }
}
Penyelesaian kepada masalah ini adalah untuk memecahkan panggilan kitaran dengan mengalih keluar medan daripada kaedah. @ToString.Exclude- Kecualikan medan dalam kaedah toString @EqualsAndHashCode.Exclude- Kecualikan medan dalam kaedah equalsdanhashCode
@Value
@With
@Builder
public class Cat {
    String name;
    int age;
    @ToString.Exclude
    @EqualsAndHashCode.Exclude
    Person person;
}
Beberapa anotasi yang lebih berguna @Slf4j- menambahkan pembalak pada kelas @SneakyThrows- membuat pengecualian yang diperiksa tidak ditandakan
@Slf4j
public class Main {

    @SneakyThrows
    public static void main(String[] args) {
        log.info("start");
        Files.readAllBytes(Paths.get(""));
    }
}
Anotasi secara individu Jika atas sebab tertentu anda hanya memerlukan kaedah 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 asas lombok, tetapi ia adalah yang paling biasa digunakan dan mempunyai kesan yang paling besar. Anda juga tidak seharusnya terlalu terbawa-bawa dengan penjanaan kod. <h2>Pautan</h2>
Komen
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION