Comment construire un objet lorsque nous avons une relation d'héritage à l'aide de lombok builder?
Dans mon projet, je suis à l'aide de lombok pour éviter d'écrire des getters et setters pour une classe.
Aussi, je suis à l'aide de lombok.Builder pour créer un objet au lieu d'écrire de nouveaux Obeject() et ensuite le réglage de toutes les valeurs.
Mais quand nous avons une relation d'héritage et quand nous voulons construire l'enfant objet à l'aide de lombok builder, je n'obtiens pas de parent.
Par exemple:
@Data
@NoArgsConstructor
@AllArgsConstructor
@ToString
@EqualsAndHashCode
public class Parent{
private String nationality;
.
.
//more columns
}
Et de la classe Enfant serait quelque chose comme ceci:
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@ToString(callSuper = true)
@EqualsAndHashCode(callSuper = true)
public class Child extends Parent{
private String firstName;
private String lastName;
.
.
}
Dans ma classe de test, où j'ai besoin de construire de l'enfant objet
public class Test{
public void testMethod(){
Child child = Child.builder()
.firstName("Rakesh")
.lastName("SS")
.nationality("some text")//I am not able to set nationality
.build();
}
}
S'il vous plaît laissez-moi savoir, est-il possible de gérer ce scénario à lombok.
Pas sûr, c'est pourquoi il a voté bas s'il vous Plaît laissez-moi savoir si tout ce que je peux améliorer
OriginalL'auteur Rakesh | 2015-10-07
Vous devez vous connecter pour publier un commentaire.
@Builder
n'a aucun moyen de déterminer quels sont les domaines d'Parent
vous souhaitez exposer.Quand
@Builder
est placé sur une classe, seuls les champs déclaré explicitement sur cette classe sont ajoutés à la*Builder
.Quand
@Builder
est placé sur une méthode statique ou à un constructeur de la résultante*Builder
aura une méthode pour chaque argument.Aussi, si vous êtes en utilisant
@Builder
alors il est sûr de supposer qu'au moinsChild
est destiné à être immuable?Je l'approvisionnement de deux exemples, l'un où
Parent
est mutable etChild
est immuable et celui où les deuxParent
etChild
sont immuables.Immuable du Parent et de l'Enfant
Mutable Parent, Immuable Enfant:
OriginalL'auteur Jeff
Solution ci-dessus fonctionne, mais cela nécessite trop de solution de contournement. Et des modifications de l'enfant et de la classe parent exige un changement des arguments du constructeur de partout.
De Lombok a introduit des fonctionnalités expérimentales avec la version: 1.18.2 pour les questions de succession face avec le Constructeur d'annotation, et peut être résolu avec @SuperBuilder annotation comme ci-dessous.
Maintenant, on peut utiliser le Constructeur de la classe comme ci-dessous (qui n'était pas possible avec @Générateur d'annotation)
OriginalL'auteur Amit Kaneria