JavaRush /Java Blog /Random-TK /Lombok kitaphanasy
Сергей
Dereje
Москва

Lombok kitaphanasy

Toparda çap edildi
Lombok kitaphanasy ýazylan kod mukdaryny azaldyp, okalmagyny ýokarlandyrýar. Lombok kitaphanasy - 1Ulanylyş mysaly. PersonÜç ugurly adaty synp :
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 bilen bir zat
@Data
public class Person {
    private String name;
    private int age;
    private Cat cat;
}
Bir topar kod aýyrdyk, ýöne ähli usullar we üýtgedijiler galdy. Bu nähili işleýär. Lombok kompil wagtynda kod döredýär. Lombok kitaphanasynyň özi iş wagtynda ýitýär. Ulanylyşy programmanyň göwrümini artdyrmaýar. Lombok ulanylanda, deslapky kodymyz Java kody dogry bolmaz. Şonuň üçin IDE üçin bir plugin gurmaly bolarsyňyz, ýogsam ösüş gurşawy onuň näme bilen meşgullanýandygyna düşünmez. Lombok ähli esasy Java IDE-lerini goldaýar. Integrasiýa üznüksiz. "Ulanylyşy görkezmek" we "durmuşa geçirmäge gitmek" ýaly ähli funksiýalar sizi degişli meýdança / synpa alyp, öňküsi ýaly işlemegini dowam etdirýär. Şeýlelik bilen, ýönekeý synplar üçin düşündiriş ulanyp bilersiňiz @Data. - konstruktor, getterler, sazlaýjylar @Data, usullar döredýär equals, hashCode. toStringObýektleri üýtgewsiz etmek üçin bar @Value. @Value- konstruktory döredýär, diňe alyjylar, usullar equals,, hashCode. toStringŞeýle hem ähli meýdanlary edýär privatewe final.
@Value
public class Cat {
    String name;
    int age;
    Person person;
}
@WithAnnotasiýa we üýtgewsiz synplar bilen gowy işlemek @Builder.
@With
@Builder
@Value
public class Cat {
    String name;
    int age;
    Person person;
}
Üýtgemeýän obýektiň meýdanyny üýtgetmek islesek, bu obýektiň klonyny bir üýtgedilen parametr bilen düzmeli. @With- üýtgedilen meýdan bilen obýektiň klonyny döredýän her bir meýdan üçin usullar goşýar.
Cat anotherCat = cat.withName("Vasya");
anotherCatcat- meýdandan başga meýdan bahalary bilen deň bolan täze obýekt name. @Builder- zynjyry boýunça bir obýekti başlatmagyň usullaryny döredýär. Allhli parametrleri bolan konstruktory ulanmak islemeýänimizde bu amatlydyr (Eger synpymyz üýtgewsiz bolsa, onda ähli parametrleri bolan ýekeje konstruktor bar).
Cat cat = Cat.builder()
                .name("Мурка")
                .age(3)
                .person(person)
                .build();
Usullaryň aýlawly çagyryşy Eger obýektleriň iki taraplaýyn aragatnaşygy bar bolsa, ýagny biri-birine salgylanmalar, soňra usullary ulanmak ýalňyşlyga sebäp toStringbolar . Sebäbi höwürtgeleýän zatlaryň usullaryna tigirli jaň ediler. Bu kod ýalňyşlyga sebäp bolar: 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);
    }
}
Meseläniň çözgüdi meýdançany usuldan aýyrmak bilen aýlawly jaňy bozmakdyr. @ToString.Exclude- Usuly bir meýdany aýyryň toString @EqualsAndHashCode.Exclude- Meýdany bir usuldan aýyryň equalswehashCode
@Value
@With
@Builder
public class Cat {
    String name;
    int age;
    @ToString.Exclude
    @EqualsAndHashCode.Exclude
    Person person;
}
Has peýdaly düşündirişler @Slf4j- synpa ýazyjy goşýar @SneakyThrows- barlanylan kadadan çykmalary barlaýar
@Slf4j
public class Main {

    @SneakyThrows
    public static void main(String[] args) {
        log.info("start");
        Files.readAllBytes(Paths.get(""));
    }
}
Aýry -aýry bellik ediň Näme üçindir diňe belli usullar gerek bolsa
@NoArgsConstructor //добавляет конструктор без аргументов
@AllArgsConstructor //добавляет конструктор со всеми параметрами
@RequiredArgsConstructor //добавляет конструктор для final полей
@Getter //добавляет геттеры для всех параметров класса
@Setter //добавляет сеттеры для всех параметров класса
@EqualsAndHashCode //добавляет реализации методов equals и hashCode
@ToString //добавляет реализацию метода toString
@FieldDefaults(level = AccessLevel.PRIVATE, makeFinal = true) //делает все поля private и final
Lombok kitaphanasy - 2<h2> Netije </h2> Bular diňe lombok düşündirişler, ýöne iň köp ulanylýan we iň uly täsiri bar. Kod döretmek bilenem kän bir gyzyklanmaly dälsiňiz. <h2> baglanyşyklar </h2>
Teswirler
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION