[JAVA] Spécifiez la valeur par défaut avec @Builder of Lombok

Post-scriptum (2017/9/10)

A partir de la v1.16.16, vous pouvez spécifier la valeur par défaut en ajoutant l'annotation `` @ Builder.Default ''.

@Builder
public class Coupon {
    @Builder.Default
    private UUID id = UUID.randomUUID();
    private String name;
    private String description;
    private ZonedDateTime expireDate;
}

À propos, Spring Boot a été importé dans la v1.5.3, donc si vous utilisez une version antérieure, vous devez spécifier explicitement la version.

Aperçu

[@Builder] de Lombok (https://projectlombok.org/features/Builder.html) est une annotation qui génère automatiquement une classe de générateur pour une classe spécifiée.

@Value
@Builder
public class Coupon {
    private UUID id;
    private String name;
    private String description;
    private ZonedDateTime expireDate;
}
Coupon coupon = Coupon.builder()
        .name("Coupon surpris")
        .description("Coupon surpris")
        .expireDate(ZonedDateTime.parse("2017-01-30T23:59:59+09:00", DateTimeFormatter.ISO_OFFSET_DATE_TIME))
        .build();

Cependant, la propriété pour laquelle aucune valeur n'est spécifiée dans l'appel du générateur sera `` null ''. Si vous essayez de définir une valeur par défaut autre que null, cela ne fonctionnera pas même si vous l'écrivez dans la classe cible comme suit.

@Value
@Builder
public class Coupon {
    private UUID id = UUID.randomUUID(); //Ne s'applique pas
    private String name = "";            //Ne s'applique pas
    private String description;
    private ZonedDateTime expireDate;
}

Par conséquent, cette fois, je vais vous présenter comment définir correctement la valeur par défaut.

Comment définir la valeur par défaut pour `` @ Builder ''

Pour définir la valeur par défaut, décrivez la classe de générateur avec la convention de dénomination `` nom de classe cible + générateur '' comme indiqué ci-dessous. Le reste est bien complété par Lombok.

@Value
@Builder
public class Coupon {
    private UUID id;
    private String name;
    private String description;
    private ZonedDateTime expireDate;

    public static class CouponBuilder {
        private UUID id = UUID.randomUUID();
        private String name = "";
    }
}

référence

Recommended Posts

Spécifiez la valeur par défaut avec @Builder of Lombok
Spécifiez le code de caractère de la source lors de la construction avec Maven
NoSuchMethodException avec lombok sans constructeur par défaut
Spécifiez le JAVA_HOME par défaut utilisé dans buildship
Vérifiez le contenu des paramètres avec le levier
Arithmétique binaire de valeur binaire avec BigInteger
Samshin sur la valeur du champ caché
À propos du traitement de BigDecimal (avec réflexion)
Mettre en forme le contenu de LocalDate avec DateTimeFormatter
Initialiser le tableau Ruby avec 0 comme Java, c'est-à-dire définir la valeur par défaut sur 0
Vérifiez le contenu de l'objet argument avec Mockito
[Ruby] Mots clés avec mots clés et valeurs par défaut des arguments
Gérez la version de Ruby elle-même avec rbenv
Écraser le contenu de la configuration avec Spring-boot + JUnit5
L'histoire du réglage de l'application Android avec libGDX
Calculer le score de similarité des chaînes de caractères avec JAVA
Préparez l'environnement CentOS 8 avec Sakura VPS
Mesurez la distance du labyrinthe avec la recherche de priorité de largeur
J'ai vérifié le nombre de taxis avec Ruby
Comparaison de vitesse lorsque le côté valeur de Hash veut tout récupérer avec un tableau
Arguments avec des valeurs par défaut Prenez la méthode full_title du tutoriel Rails comme exemple
[Jackson] Une histoire sur la conversion de la valeur de retour du type BigDecimal avec un sérialiseur personnalisé.
Spécifiez le codage des ressources statiques dans Spring Boot
Lister le contenu des catégories créées avec Active Hash
JavaFX --Match la taille d'ImageView avec d'autres nœuds
CI l'architecture des applications Java / Kotlin avec ArchUnit
[JUnit 5] Traiter de "la référence d'assertEquals est ambiguë"
Accédez au h2db intégré de Spring Boot avec jdbcTemplate
Tester le contenu d'un fichier Excel avec JUnit
L'histoire de la création d'un proxy inverse avec ProxyServlet
[Java] Comment obtenir la valeur maximale de HashMap
Surveillez l'état interne des programmes Java avec Kubernetes
Implémentez iOS14 UICollectionView avec le code minimum requis.
Vérifiez le comportement de Java Intrinsic Locks avec bpftrace
[Rails] Annuler / modifier la validation du mot de passe du périphérique définie par défaut
Afficher la valeur moyenne de l'évaluation sous forme d'étoile
Trouvez la valeur approximative de log (1 + x) avec Swift
Utilisez-vous correctement la méthode par défaut de l'interface?
Contrôlez le flux de traitement Spring Batch avec JavaConfig.
Spécifiez VS Code comme éditeur par défaut pour jshell
Comment la valeur suivante de l'objet Time est-elle correcte?
L'histoire de la création de DTO, semblable à Dao avec Java, SQLite
Remplacez seulement une partie de l'hôte URL par java
[Java] Le rapport de couverture n'a pas pu être créé en combinant la méthode par défaut de l'interface Cobertura +
Comment spécifier un tableau pour la valeur de retour / l'argument d'une méthode dans le fichier IDL CORBA