web-dev-qa-db-fra.com

Héritage pour les constructeurs à Lombok

J'essayais d'utiliser Lombok pour mon projet. 

J'ai une classe A:

@Data
@Builder
public class A {
    Integer a1;
}

et une classe B:

@Data
public class B extends A {
    Integer b1;

    @Builder
    public B(Integer b1, Integer a1) {
        super(a1);
        this.b1 = b1;
    }
}

Je reçois une erreur disant que builder () dans B ne peut pas remplacer builder () dans A, car le type de retour dans BBuilder n'est pas compatible avec le type de retour dans ABuilder. 

Y a-t-il un moyen de faire cela en utilisant lombok? Je ne veux pas écrire le constructeur complet pour B, sauf si je n'ai pas d'autre option. 

PS: J'ai donné un constructeur explicite pour la classe B en raison de Issue . J'ai essayé de chercher, mais je ne trouvais pas de bonne solution pour la même chose. Toute aide est vraiment appréciée.

13
Abhinav Aggarwal

Ici, nous devons juste appeler super du constructeur.

@Data
public class B extends A {
    Integer b1;

    @Builder
    public B(Integer b1, Integer a1) {
        super(a1);
        this.b1 = b1;
    }

    public static class BBuilder extends ABuilder{
            BBuilder() {
                super();
            }
    }
}
19
Abhinav Aggarwal

Lombok a introduit des fonctionnalités expérimentales avec la version 1.18.2 pour les problèmes d'héritage liés à l'annotation Builder, et peut être résolu avec l'annotation @SuperBuilder

Veuillez utiliser la version de lombok: 1.18.2, les annotations @SuperBuilder dans la classe enfant/parent

1
Amit Kaneria