JavaRush /Blog Java /Random-FR /Bibliothèque de Lombok
Сергей
Niveau 40
Москва

Bibliothèque de Lombok

Publié dans le groupe Random-FR
La bibliothèque Lombok réduit la quantité de code écrit, améliorant ainsi la lisibilité. Bibliothèque de Lombok - 1Exemple d'utilisation. Une classe régulière Personavec trois domaines :
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 +
                '}';
    }
}
Même chose avec Lombok
@Data
public class Person {
    private String name;
    private int age;
    private Cat cat;
}
Nous avons supprimé un tas de code, cependant, toutes les méthodes et modificateurs sont restés. Comment ça fonctionne. Lombok génère du code au moment de la compilation. La bibliothèque lombok elle-même est manquante au moment de l'exécution. Son utilisation n'augmente pas la taille du programme. Lors de l'utilisation de Lombok, notre code source ne sera pas du code Java valide. Par conséquent, vous devrez installer un plugin pour l'IDE, sinon l'environnement de développement ne comprendra pas de quoi il s'agit. Lombok prend en charge tous les principaux IDE Java. L’intégration est transparente. Toutes les fonctions telles que « afficher l'utilisation » et « aller à l'implémentation » continuent de fonctionner comme avant, vous amenant au champ/classe approprié. Ainsi, pour les classes simples, vous pouvez utiliser l'annotation @Data. @Data- génère un constructeur, des getters, des setters, des méthodes equals, hashCode, toString. Pour rendre les objets immuables, il existe @Value. @Value- génère le constructeur, uniquement les getters, les méthodes equals, hashCode, toString. Et fait également tous les champs privateet final.
@Value
public class Cat {
    String name;
    int age;
    Person person;
}
@WithLes annotations et .fonctionnent bien avec les classes immuables @Builder.
@With
@Builder
@Value
public class Cat {
    String name;
    int age;
    Person person;
}
Si nous voulons changer le champ d'un objet immuable, nous devons alors créer un clone de cet objet avec un paramètre modifié. @With- ajoute des méthodes pour chaque champ qui créent un clone de l'objet avec un champ modifié.
Cat anotherCat = cat.withName("Vasya");
anotherCat- un nouvel objet dont les valeurs de champ sont les mêmes que celles de cat, à l'exception du champ name. @Builder- génère des méthodes avec lesquelles nous initialisons un objet le long d'une chaîne. C'est pratique lorsque nous ne voulons pas utiliser un constructeur avec tous les paramètres (si notre classe est immuable, alors elle a un seul constructeur avec tous les paramètres).
Cat cat = Cat.builder()
                .name("Мурка")
                .age(3)
                .person(person)
                .build();
Appel cyclique de méthodes Si les objets ont une communication bidirectionnelle, c'est-à-dire références les unes aux autres, l'utilisation des méthodes toStringentraînera equalsune hashCodeerreur StackOverflowError. Parce que il y aura un appel cyclique aux méthodes des objets imbriqués. Ce code entraînera une erreur :
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);
    }
}
La solution au problème consiste à interrompre l'appel cyclique en supprimant le champ de la méthode. @ToString.Exclude- Exclure un champ dans une méthode toString @EqualsAndHashCode.Exclude- Exclure un champ dans une méthode equalsethashCode
@Value
@With
@Builder
public class Cat {
    String name;
    int age;
    @ToString.Exclude
    @EqualsAndHashCode.Exclude
    Person person;
}
Quelques annotations plus utiles @Slf4j- ajoute un enregistreur à la classe @SneakyThrows- décoche les exceptions vérifiées
@Slf4j
public class Main {

    @SneakyThrows
    public static void main(String[] args) {
        log.info("start");
        Files.readAllBytes(Paths.get(""));
    }
}
Annoter individuellement Si, pour une raison quelconque, vous n'avez besoin que de certaines méthodes
@NoArgsConstructor //добавляет конструктор без аргументов
@AllArgsConstructor //добавляет конструктор со всеми параметрами
@RequiredArgsConstructor //добавляет конструктор для final полей
@Getter //добавляет геттеры для всех параметров класса
@Setter //добавляет сеттеры для всех параметров класса
@EqualsAndHashCode //добавляет реализации методов equals и hashCode
@ToString //добавляет реализацию метода toString
@FieldDefaults(level = AccessLevel.PRIVATE, makeFinal = true) //делает все поля private и final
Bibliothèque de Lombok - 2<h2>Conclusion</h2>Ce ne sont que les annotations de base du Lombok, mais elles sont les plus couramment utilisées et ont le plus grand effet. Vous ne devriez pas non plus vous laisser emporter par la génération de code. <h2>Liens</h2>
Commentaires
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION