JavaRush /Java Blogu /Random-AZ /Lombok Kitabxanası
Сергей
Səviyyə
Москва

Lombok Kitabxanası

Qrupda dərc edilmişdir
Lombok kitabxanası yazılan kodun miqdarını azaldır, oxunaqlılığı artırır. Lombok Kitabxanası - 1İstifadə nümunəsi. PersonÜç sahəli adi sinif :
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 +
                '}';
    }
}
Lombok ilə eyni şey
@Data
public class Person {
    private String name;
    private int age;
    private Cat cat;
}
Bir dəstə kodu sildik, lakin bütün üsullar və dəyişdiricilər qaldı. Bu necə işləyir. Lombok tərtib zamanı kod yaradır. Lombok kitabxanasının özü işləmə müddətində yoxdur. Onun istifadəsi proqramın ölçüsünü artırmır. Lombok istifadə edərkən mənbə kodumuz etibarlı Java kodu olmayacaq. Buna görə də, IDE üçün plagin quraşdırmalı olacaqsınız, əks halda inkişaf mühiti nə ilə məşğul olduğunu başa düşməyəcək. Lombok bütün əsas Java İDE-lərini dəstəkləyir. İnteqrasiya qüsursuzdur. "İstifadə göstər" və "həyata keçir" kimi bütün funksiyalar əvvəlki kimi işləməyə davam edir və sizi müvafiq sahəyə/sinfə aparır. Beləliklə, sadə dərslər üçün annotasiyadan istifadə edə bilərsiniz @Data. @Data- konstruktor, alıcı, təyinedici, üsullar equals, hashCode, , yaradır toString. Obyektləri dəyişməz etmək üçün var @Value. @Value- konstruktor yaradır, yalnız alıcılar, üsullar equals, hashCode, toString. Həm də bütün sahələr privatefinal.
@Value
public class Cat {
    String name;
    int age;
    Person person;
}
@WithAnnotasiyalar və .dəyişməz siniflərlə yaxşı işləyir @Builder.
@With
@Builder
@Value
public class Cat {
    String name;
    int age;
    Person person;
}
Dəyişməz obyektin sahəsini dəyişmək istəyiriksə, onda bir dəyişdirilmiş parametrlə bu obyektin klonunu yaratmalıyıq. @With- dəyişdirilmiş bir sahə ilə obyektin klonunu yaradan hər bir sahə üçün metodlar əlavə edir.
Cat anotherCat = cat.withName("Vasya");
anotherCatcat- sahə istisna olmaqla, sahə dəyərləri ilə eyni olan yeni obyekt name. @Builder- zəncir boyu obyekti işə saldığımız üsulları yaradır. Bu, bütün parametrləri olan konstruktordan istifadə etmək istəmədiyimiz zaman əlverişlidir (Əgər sinifimiz dəyişməzdirsə, onda bütün parametrləri olan bir konstruktor var).
Cat cat = Cat.builder()
                .name("Мурка")
                .age(3)
                .person(person)
                .build();
Metodların siklik çağırışı Əgər obyektlərin iki istiqamətli əlaqəsi varsa, yəni. Bir-birinə istinadlar, daha sonra üsulların istifadəsi xətaya səbəb toStringolar . Çünki yuvalanmış obyektlərin metodlarına tsiklik çağırış olacaq. Bu kod xəta ilə nəticələnəcək: equalshashCodeStackOverflowError
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);
    }
}
Problemin həlli sahəni metoddan çıxararaq tsiklik çağırışı pozmaqdır. @ToString.Exclude- Metodda sahəni istisna et toString @EqualsAndHashCode.Exclude- Metodda sahəni xaric et equalshashCode
@Value
@With
@Builder
public class Cat {
    String name;
    int age;
    @ToString.Exclude
    @EqualsAndHashCode.Exclude
    Person person;
}
Daha bir neçə faydalı annotasiya @Slf4j- sinifə qeydedici əlavə edir @SneakyThrows- yoxlanılan istisnaları işarədən çıxarır
@Slf4j
public class Main {

    @SneakyThrows
    public static void main(String[] args) {
        log.info("start");
        Files.readAllBytes(Paths.get(""));
    }
}
Ayrı-ayrılıqda qeyd edin Nədənsə yalnız müəyyən üsullara ehtiyacınız varsa
@NoArgsConstructor //добавляет конструктор без аргументов
@AllArgsConstructor //добавляет конструктор со всеми параметрами
@RequiredArgsConstructor //добавляет конструктор для final полей
@Getter //добавляет геттеры для всех параметров класса
@Setter //добавляет сеттеры для всех параметров класса
@EqualsAndHashCode //добавляет реализации методов equals и hashCode
@ToString //добавляет реализацию метода toString
@FieldDefaults(level = AccessLevel.PRIVATE, makeFinal = true) //делает все поля private и final
Lombok Kitabxanası - 2<h2>Nəticə</h2>Bunlar sadəcə əsas lombok annotasiyalarıdır, lakin onlar ən çox istifadə edilənlərdir və ən böyük təsirə malikdirlər. Siz də kod yaratmaqla çox məşğul olmamalısınız. <h2>Bağlantılar</h2>
Şərhlər
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION