[JAVA] Lombok ② Génération d'objets

Articles passés sur Lombok

Lombok ① Introduction

Annotations liées à la création d'objets

Lors de l'utilisation de l'opérateur New

Annotation utilisée

Name.java


@NoArgsConstructor
@AllArgsConstructor
@Data
public class Name
{
    private String value = "";
}

Age.java


@NoArgsConstructor
@AllArgsConstructor
@Data
public class Age
{
    private Integer value;
}

Person.java


@AllArgsConstructor
@NoArgsConstructor
@Data
public class Person
{
    private Name name = new Name();
    private Age age = new Age();
}

PersonFactory.java


public class PersonFactory
{
    public static Person empty()
    {
        return new Person();
    }

    public static Person of( String name, Integer age)
    {
        return new Person(
                   new Name( name ),
                   new Age( age )
               );//Les arguments du constructeur sont dans l'ordre de définition des champs
    }


}

Il peut être généré comme ça.

Lors de l'utilisation de méthodes statiques

Annotation utilisée

Name.java


@NoArgsConstructor(staticName="empty")//Spécifiez le nom de la méthode statique
@AllArgsConstructor(staticName="of")//Spécifiez le nom de la méthode statique
@Data
public class Name
{
    private String value = "";
}

Age.java


@NoArgsConstructor(staticName="empty")//Spécifiez le nom de la méthode statique
@AllArgsConstructor(staticName="of")//Spécifiez le nom de la méthode statique
@Data
public class Age
{
    private Integer value;
}

Person.java


@NoArgsConstructor(staticName="empty")//Spécifiez le nom de la méthode statique
@AllArgsConstructor(staticName="of")//Spécifiez le nom de la méthode statique
@Data
public class Person
{
    private Name name = Name.empty();
    private Age age = Age.empty();
}

PersonFactory.java


public class PersonFactory
{
    public static Person empty()
    {
        return Person.empty();
    }

    public static Person of( String name, Integer age)
    {
        return Person.of(
                  Name.of( name ),
                  Age.of( age )
               );//Les arguments de méthode sont dans l'ordre de définition des champs
    }


}

Il peut être généré comme ça.

Lors de l'utilisation de la méthode du générateur

Annotation utilisée

Si la classe Person se développe comme suit,

Person.java


@NoArgsConstructor(staticName="empty")
@AllArgsConstructor(staticName="of")
@Data
public class Person
{
    private Name name = Name.empty();
    private Age age = Age.empty();
    private GenderType genderType = GenderType.UNDEFINED;
    private PhoneNumber phoneNumber = PhoneNumber.empty();
    private MailAddress mailAddress = MailAddress.empty();
    ...
}

La méthode ci-dessus rend la classe Factory un peu plus compliquée.

PersonFactory.java


public class PersonFactory
{
    public static Person empty()
    {
        return Person.empty();
    }

    public static Person of( String name, Integer age, GenderType genderType, String phoneNumber, String mailAddress )
    {
        return Person.of(
                  Name.of( name ),
                  Age.of( age ),
                  genderType,
                  PhoneNumber.of( phoneNumber ),
                  MailAddress.of( mailAddress )
               );//Une erreur se produit chaque fois que l'ordre ou le nombre de champs change
    }
}

De cette manière, l'argument de la méthode of dépend de l'ordre des champs et du numéro de la classe.

Donc, si vous ajoutez @ Builder, cela changera comme suit.

Person.java


@Builder//ajouter à
@AllArgsConstructor(access=AccessLevel.PRIVATE)//Contrôle du constructeur avec des arguments normaux
@NoArgsConstructor(staticName="empty")
@Data
public class Person
{
    private Name name = Name.empty();
    private Age age = Age.empty();
    private GenderType genderType = GenderType.UNDEFINED;
    private PhoneNumber phoneNumber = PhoneNumber.empty();
    private MailAddress mailAddress = MailAddress.empty();
    ...
}

PersonFactory.java


public class PersonFactory
{
    public static Person empty()
    {
        return Person.empty();
    }

    public static Person of( String name, Integer age, GenderType genderType, String phoneNumber, String mailAddress )
    {
        return Person.builder()//commencer bullder
                     .name( Name.of( name ) )//Définir une valeur pour la méthode de nom de champ
                     .phoneNumber( PhoneNumber.of( phoneNumber ) )//Il n'y a pas de problème même si les champs sont commutés car l'ordre est aléatoire.
                     .mailAddress( MailAddress.of( mailAddress ) )
                     .age( Age.of( age ) )
                     ...
                     .build();//produire

    }
}

Comme mentionné ci-dessus, il sera possible de répondre de manière flexible en l'état. Cependant, si vous modifiez le nom du champ, la méthode lombok ne sera pas modifiée, vous devez donc modifier la source manuellement **.

De plus, vous devez faire attention car ** Null sera entré ** pour les champs pour lesquels vous n'avez pas défini de valeur ici.

la prochaine fois

Ensuite, je résumerai l'utilisation détaillée de chaque annotation.

Eh bien.

Recommended Posts

Lombok ② Génération d'objets
Lombok ① Introduction
Mémo de Lombok
Essayez Lombok
Java à partir du débutant, déclaration de classe / génération d'objet
[Note personnelle] Génération d'objets de contrôle de placement de bouton Eclipse