Китобхонаи Ломбок миқдори рамзи навишташударо кам карда, хонишро беҳтар мекунад. Намунаи истифода. Синфи муқаррарӣ
Person
бо се соҳа:
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 +
'}';
}
}
Ҳамин чиз бо ломбок
@Data
public class Person {
private String name;
private int age;
private Cat cat;
}
Мо як қатор codeҳоро хориҷ кардем, аммо ҳама усулҳо ва тағирдиҳандаҳо боқӣ монданд. Он чӣ гуна кор мекунад. Lombok codeро дар вақти тартибдиҳӣ тавлид мекунад. Худи китобхонаи ломбок дар вақти корӣ нест. Истифодаи он андозаи барномаро зиёд намекунад. Ҳангоми истифодаи Lombok, рамзи сарчашмаи мо codeи Java эътибор надорад. Аз ин рӯ, ба шумо лозим меояд, ки плагинро барои IDE насб кунед, вагарна муҳити рушд намефаҳмад, ки он бо чӣ кор мекунад. Lombok ҳама IDE-ҳои асосии Java -ро дастгирӣ мекунад. Интегратсия бефосила аст. Ҳама функсияҳо ба монанди "нишон додани истифода" ва "ба амалисозӣ гузаштан" мисли пештара кор карда, шуморо ба соҳа/синфи мувофиқ мебаранд. Ҳамин тавр, барои дарсҳои оддӣ шумо метавонед эзоҳро истифода баред @Data
. @Data
- созанда, гирандагон, танзимкунандаҳо, усулҳо equals
, hashCode
, , тавлид мекунад toString
. Барои тағирнопазир сохтани an objectҳо вуҷуд дорад @Value
. @Value
- конструкторро тавлид мекунад, танҳо гирандагон, методҳо equals
, hashCode
, toString
. Ва инчунин тамоми майдонхо private
ва final
.
@Value
public class Cat {
String name;
int age;
Person person;
}
@With
Эзоҳҳо ва .бо синфҳои тағирнашаванда хуб кор мекунанд @Builder
.
@With
@Builder
@Value
public class Cat {
String name;
int age;
Person person;
}
Агар мо майдони an objectи тағирнашавандаро тағир додан хоҳем, пас мо бояд клони ин an objectро бо як параметри тағирёфта созем. @With
- усулҳоро барои ҳар як майдон, ки клони an objectро бо як майдони тағирёфта месозад, илова мекунад.
Cat anotherCat = cat.withName("Vasya");
anotherCat
- an objectи наве, ки арзишҳои майдони он бо арзиши якхелаанд cat
, ба истиснои майдон name
. @Builder
- усулҳоеро тавлид мекунад, ки бо онҳо an objectро дар як занҷир оғоз мекунем. Ин қулай аст, вақте ки мо намехоҳем конструкторро бо ҳама параметрҳо истифода барем (Агар синфи мо тағирнопазир бошад, пас он як конструктори ягона бо ҳама параметрҳо дорад).
Cat cat = Cat.builder()
.name("Мурка")
.age(3)
.person(person)
.build();
Даъвати сиклии усулҳо Агар an objectҳо алоқаи дуҷониба дошта бошанд, яъне. истинод ба якдигар, пас истифодаи усулҳо toString
боиси equals
хато . Зеро даъвати даврӣ ба усулҳои an objectҳои лона гузошта мешавад. Ин code ба хатогӣ оварда мерасонад: 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);
}
}
Ҳалли мушкилот ин шикастани занги даврӣ тавассути хориҷ кардани майдон аз усул аст. @ToString.Exclude
- Майдонро дар усул истисно кунед toString
@EqualsAndHashCode.Exclude
- Майдонро дар усул истисно кунед equals
ваhashCode
@Value
@With
@Builder
public class Cat {
String name;
int age;
@ToString.Exclude
@EqualsAndHashCode.Exclude
Person person;
}
Якчанд эзоҳҳои муфидтар @Slf4j
- ба синф сабткунанда илова мекунад @SneakyThrows
- истисноҳои санҷидашударо ғайричашмдошт мекунад
@Slf4j
public class Main {
@SneakyThrows
public static void main(String[] args) {
log.info("start");
Files.readAllBytes(Paths.get(""));
}
}
Ба таври алоҳида эзоҳ диҳед Агар бо ягон сабаб ба шумо танҳо усулҳои муайян лозим бошад
@NoArgsConstructor //добавляет конструктор без аргументов
@AllArgsConstructor //добавляет конструктор со всеми параметрами
@RequiredArgsConstructor //добавляет конструктор для final полей
@Getter //добавляет геттеры для всех параметров класса
@Setter //добавляет сеттеры для всех параметров класса
@EqualsAndHashCode //добавляет реализации методов equals и hashCode
@ToString //добавляет реализацию метода toString
@FieldDefaults(level = AccessLevel.PRIVATE, makeFinal = true) //делает все поля private и final
<h2>Хулоса</h2>Инҳо танҳо шарҳҳои асосии ломбок мебошанд, аммо онҳо маъмултарин истифода мешаванд ва таъсири бештар доранд. Шумо набояд бо тавлиди code низ аз ҳад зиёд саркашӣ кунед. <h2>Истинодҳо</h2>
GO TO FULL VERSION