Contournement de l'héritage Lombok @Builder
Lombok @Builder ne fonctionne pas pour les cas d'utilisation d'héritage:
Par exemple
class Foo{
protected int xyz1;
.....
protected String xyz7;
}
class Bar extends Foo{
}
Pour un cas d'utilisation donné, Lombok ne pourra pas générer de méthodes pour définir la valeur du paramètre défini dans la classe Foo.
Une solution de contournement pour ceci est:
- Création manuelle du constructeur de Bar.
- Mettre une annotation Builder sur ce constructeur.
Existe-t-il une meilleure solution de contournement?
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 comme ci-dessous.
@SuperBuilder
public class ParentClass {
private final String a;
private final String b;
}
@SuperBuilder
public class ChildClass extends ParentClass{
private final String c;
}
Maintenant, on peut utiliser la classe Builder comme ci-dessous (ce n'était pas possible avec l'annotation @Builder)
ChildClass.builder().a("testA").b("testB").c("testC").build();
C'est un peu caché, mais les gens ont déjà eu cette question, voir:
https://reinhard.codes/2015/09/16/lomboks-builder-annotation-and-inheritance/
Pour résumer le blog
@AllArgsConstructor
public class Parent {
private String a;
}
public class Child extends Parent {
private String b;
@Builder
private Child(String a, String b){
super(a);
this.b = b;
}
}
Vous permettrait d'utiliser
Child.builder().a("testA").b("testB").build()
Il existe actuellement une solution à ce problème. Vérifiez l'état d'avancement ici: https://github.com/rzwitserloot/lombok/pull/1337