@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 )
);//Konstruktorargumente sind in der Reihenfolge der Felddefinition
}
}
Es kann so generiert werden.
@NoArgsConstructor
@AllArgsConstructor
Name.java
@NoArgsConstructor(staticName="empty")//Geben Sie den statischen Methodennamen an
@AllArgsConstructor(staticName="of")//Geben Sie den statischen Methodennamen an
@Data
public class Name
{
private String value = "";
}
Age.java
@NoArgsConstructor(staticName="empty")//Geben Sie den statischen Methodennamen an
@AllArgsConstructor(staticName="of")//Geben Sie den statischen Methodennamen an
@Data
public class Age
{
private Integer value;
}
Person.java
@NoArgsConstructor(staticName="empty")//Geben Sie den statischen Methodennamen an
@AllArgsConstructor(staticName="of")//Geben Sie den statischen Methodennamen an
@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 )
);//Methodenargumente sind in Felddefinitionsreihenfolge
}
}
Es kann so generiert werden.
@Builder
Wenn die Personenklasse wie folgt wächst,
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();
...
}
Die obige Methode macht die Factory-Klasse etwas komplizierter.
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 )
);//Ein Fehler tritt jedes Mal auf, wenn sich die Reihenfolge oder Anzahl der Felder ändert
}
}
Auf diese Weise hängt das Argument der of-Methode von der Feldreihenfolge und der Nummer der Klasse ab.
Wenn Sie also "@ Builder" hinzufügen, ändert sich dies wie folgt.
Person.java
@Builder//hinzufügen
@AllArgsConstructor(access=AccessLevel.PRIVATE)//Steuerung des Konstruktors mit normalen Argumenten
@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()//Bullder starten
.name( Name.of( name ) )//Legen Sie einen Wert für die Feldnamenmethode fest
.phoneNumber( PhoneNumber.of( phoneNumber ) )//Es gibt kein Problem, auch wenn die Felder gewechselt werden, da die Reihenfolge zufällig ist.
.mailAddress( MailAddress.of( mailAddress ) )
.age( Age.of( age ) )
...
.build();//Generieren
}
}
Wie oben erwähnt, wird es möglich sein, flexibel so zu reagieren, wie es ist. Wenn Sie jedoch den Feldnamen ändern, wird die Lombok-Methode nicht geändert, sodass Sie die Quelle manuell ändern müssen **.
Sie müssen auch vorsichtig sein, da für Felder, für die Sie hier keinen Wert festgelegt haben, ** Null eingegeben wird **.
Als nächstes werde ich die detaillierte Verwendung jeder Anmerkung zusammenfassen.
Na dann.