JavaRush /Blog Jawa /Random-JV /Pustaka Lombok
Сергей
tingkat
Москва

Pustaka Lombok

Diterbitake ing grup
Pustaka Lombok nyuda jumlah kode sing ditulis, ningkatake keterbacaan. Perpustakaan Lombok - 1Conto panggunaan. Kelas reguler Personkanthi telung lapangan:
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 +
                '}';
    }
}
Sing padha karo lombok
@Data
public class Person {
    private String name;
    private int age;
    private Cat cat;
}
We mbusak Bunch saka kode, Nanging, kabeh cara lan modifiers tetep. Cara kerjane. Lombok ngasilake kode ing wektu kompilasi. Perpustakaan lombok dhewe ilang ing runtime. Panggunaan kasebut ora nambah ukuran program. Nalika nggunakake Lombok, kode sumber kita ora bakal dadi kode Jawa sing valid. Mulane, sampeyan kudu nginstal plugin kanggo IDE, yen ora, lingkungan pangembangan ora bakal ngerti apa sing ditangani. Lombok ndhukung kabeh IDE Jawa utama. Integrasi kasebut mulus. Kabeh fungsi kaya "nuduhake panggunaan" lan "go to implementasine" terus mlaku kaya sadurunge, nggawa sampeyan menyang lapangan / kelas sing cocog. Dadi, kanggo kelas prasaja sampeyan bisa nggunakake anotasi @Data. @Data- ngasilake konstruktor, getter, setter, metode equals,, hashCode. toStringKanggo nggawe obyek immutable ana @Value. @Value- ngasilake konstruktor, mung getter, cara equals,, hashCode. toStringLan uga nindakake kabeh lapangan privatelan final.
@Value
public class Cat {
    String name;
    int age;
    Person person;
}
@WithAnotasi lan .bisa dianggo kanthi apik karo kelas sing ora bisa diganti @Builder.
@With
@Builder
@Value
public class Cat {
    String name;
    int age;
    Person person;
}
Yen kita pengin ngganti lapangan obyek sing ora bisa diganti, mula kita kudu nggawe kloning obyek kasebut kanthi parameter sing diganti. @With- nambah cara kanggo saben lapangan sing nggawe tiron saka obyek karo siji lapangan diganti.
Cat anotherCat = cat.withName("Vasya");
anotherCat- obyek anyar sing nilai lapangan padha karo cat, kajaba kanggo lapangan name. @Builder- ngasilake cara sing kita initialize obyek bebarengan chain. Iki trep nalika kita ora pengin nggunakake konstruktor karo kabeh paramèter (Yen kelas kita immutable, banjur wis konstruktor siji karo kabeh paramèter).
Cat cat = Cat.builder()
                .name("Мурка")
                .age(3)
                .person(person)
                .build();
Panggil cara siklik Yen obyek duwe komunikasi bidirectional, i.e. referensi kanggo saben liyane, banjur nggunakake cara toStringbakal equalsmimpin hashCodekanggo kesalahan StackOverflowError. Amarga bakal ana telpon siklik kanggo metode obyek nested. Kode iki bakal nyebabake kesalahan:
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);
    }
}
Solusi kanggo masalah kasebut yaiku ngilangi panggilan siklik kanthi ngilangi lapangan saka metode kasebut. @ToString.Exclude- Ngilangi lapangan ing cara toString @EqualsAndHashCode.Exclude- Ngilangi lapangan ing cara equalslanhashCode
@Value
@With
@Builder
public class Cat {
    String name;
    int age;
    @ToString.Exclude
    @EqualsAndHashCode.Exclude
    Person person;
}
Saperangan anotasi sing luwih migunani @Slf4j- nambahake logger menyang kelas @SneakyThrows- nggawe pangecualian sing dicenthang ora dicenthang
@Slf4j
public class Main {

    @SneakyThrows
    public static void main(String[] args) {
        log.info("start");
        Files.readAllBytes(Paths.get(""));
    }
}
Annotate individu Yen sakperangan alesan sampeyan mung mbutuhake cara tartamtu
@NoArgsConstructor //добавляет конструктор без аргументов
@AllArgsConstructor //добавляет конструктор со всеми параметрами
@RequiredArgsConstructor //добавляет конструктор для final полей
@Getter //добавляет геттеры для всех параметров класса
@Setter //добавляет сеттеры для всех параметров класса
@EqualsAndHashCode //добавляет реализации методов equals и hashCode
@ToString //добавляет реализацию метода toString
@FieldDefaults(level = AccessLevel.PRIVATE, makeFinal = true) //делает все поля private и final
Perpustakaan Lombok - 2<h2> Kesimpulan</h2>Iki mung anotasi lombok dhasar, nanging sing paling umum digunakake lan duwe efek paling gedhe. Sampeyan uga ora perlu banget digawa karo generasi kode. <h2>Link</h2>
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION