Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.util.Collections;
- import java.util.HashSet;
- import java.util.Set;
- public class Person {
- private final int id;
- private final String name;
- private final int age;
- private final Set<String> pets;
- private Person(Builder builder) {
- this.id = builder.id;
- this.name = builder.name;
- this.age = builder.age;
- this.pets = Collections.unmodifiableSet(builder.pets);
- }
- public int getId() {
- return id;
- }
- public String getName() {
- return name;
- }
- public int getAge() {
- return age;
- }
- public Set<String> getPets() {
- return pets;
- }
- @Override
- public String toString() {
- return "Person [id=" + id + ", name=" + name + ", age=" + age + ", pets=" + pets + "]";
- }
- public static class Builder {
- private int id;
- private String name;
- private int age;
- private Set<String> pets;
- private final NameMandatoryFieldBuilder mandatoryFieldName;
- private final OptionalFieldsBuilder optionalFields;
- public Builder() {
- pets = new HashSet<String>();
- mandatoryFieldName = new NameMandatoryFieldBuilder(this);
- optionalFields = new OptionalFieldsBuilder(this);
- }
- public NameMandatoryFieldBuilder id(int id) {
- this.id = id;
- return mandatoryFieldName;
- }
- }
- public static class NameMandatoryFieldBuilder {
- private final Builder builder;
- private NameMandatoryFieldBuilder(Builder builder) {
- this.builder = builder;
- }
- public OptionalFieldsBuilder name(String name) {
- builder.name = name;
- return builder.optionalFields;
- }
- }
- public static class OptionalFieldsBuilder {
- private final Builder builder;
- private OptionalFieldsBuilder(Builder builder) {
- this.builder = builder;
- }
- public OptionalFieldsBuilder age(int age) {
- builder.age = age;
- return builder.optionalFields;
- }
- public OptionalFieldsBuilder pets(String... pets) {
- for (String pet : pets) {
- builder.pets.add(pet);
- }
- return builder.optionalFields;
- }
- public Person build() {
- return new Person(builder);
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement