@NoArgsConstructor
@AllArgsConstructor
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.
@NoArgsConstructor
@AllArgsConstructor
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.
@Builder
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.
Ensuite, je résumerai l'utilisation détaillée de chaque annotation.
Eh bien.