web-dev-qa-db-fra.com

Lombok: Comment spécifier un constructeur à un argument?

En utilisant Lombok, est-il possible de spécifier un constructeur à un argument?

Mon intention est d'utiliser des annotations Lombok pour créer un constructeur tel que celui ci-dessous.

class MyClass {
    private String param;
    private Integer count;

    public MyClass(String param) {
        this.param = param;
    }
}
16
barbara

Je n'ai pas trouvé dans la documentation

Que diriez-vous de ceci: http://projectlombok.org/features/Constructor.html ?

Vous devez initialiser toutes les variables qui ne devraient pas faire partie du constructeur.

@RequiredArgsConstructor génère un constructeur avec 1 paramètre pour chaque champ qui nécessite une gestion spéciale. Tous les champs finaux non initialisés obtiennent un paramètre, ainsi que tous les champs marqués comme @NonNull qui ne sont pas initialisés là où ils sont déclarés. Pour les champs marqués avec @NonNull, une vérification nulle explicite est également générée.

Donc, ce qui suit devrait créer un constructeur à un argument (param):

@RequiredArgsConstructor class MyClass {
     private String param;
     private Integer count = -1;
}
15
KnutKnutsen

Lombok ne vous permet pas de spécifier exactement les champs, mais vous avez le choix entre 3 annotations. Avec

@RequiredArgsConstructor class MyClass {
    private final String param;
    private Integer count;
}

tu peux l'avoir. Un argument est obligatoire s'il n'est pas initialisé en ligne et final ou @NonNull.

12
maaartinus

@RequiredArgsConstructor et @NonNull sont deux clés importantes pour résoudre le problème ci-dessus. Car @RequiredArgsConstructor crée un constructeur avec des champs qui sont annotés par @NonNull annotation.

@RequiredArgsConstructor
class MyClass {
    @NonNull
    private String param;
    private Integer count;


}

Cela équivaut à:

class MyClass {
    private String param;
    private Integer count;

    public MyClass(String param) {
        this.param = param;
    }
}
0
HarryCoder