JavaRush /Блоги Java /Random-TG /Китобхонаи Ломбок
Сергей
Сатҳи
Москва

Китобхонаи Ломбок

Дар гурӯҳ нашр шудааст
Китобхонаи Ломбок миқдори рамзи навишташударо кам карда, хонишро беҳтар мекунад. Китобхонаи Ломбок - 1Намунаи истифода. Синфи муқаррарӣ 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 ба хатогӣ оварда мерасонад: hashCodeStackOverflowError
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
Китобхонаи Ломбок - 2<h2>Хулоса</h2>Инҳо танҳо шарҳҳои асосии ломбок мебошанд, аммо онҳо маъмултарин истифода мешаванд ва таъсири бештар доранд. Шумо набояд бо тавлиди code низ аз ҳад зиёд саркашӣ кунед. <h2>Истинодҳо</h2>
Шарҳҳо
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION