Lombok kitabxanası yazılan kodun miqdarını azaldır, oxunaqlılığı artırır. İ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 private
və final
.
@Value
public class Cat {
String name;
int age;
Person person;
}
@With
Annotasiyalar 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");
anotherCat
cat
- 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 toString
olar . Çünki yuvalanmış obyektlərin metodlarına tsiklik çağırış olacaq. Bu kod xəta ilə nəticələnəcək: equals
hashCode
StackOverflowError
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 equals
vəhashCode
@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
<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>
GO TO FULL VERSION