xref: /aosp_15_r20/external/auto/value/userguide/generated-builder-example.md (revision 1c2bbba85eccddce6de79cbbf1645fda32e723f0)
1*1c2bbba8SAndroid Build Coastguard Worker# Generated builder example
2*1c2bbba8SAndroid Build Coastguard Worker
3*1c2bbba8SAndroid Build Coastguard Worker
4*1c2bbba8SAndroid Build Coastguard WorkerFor the code shown in the [builder documentation](builders.md), the following is
5*1c2bbba8SAndroid Build Coastguard Workertypical code AutoValue might generate:
6*1c2bbba8SAndroid Build Coastguard Worker
7*1c2bbba8SAndroid Build Coastguard Worker```java
8*1c2bbba8SAndroid Build Coastguard Workerimport javax.annotation.Generated;
9*1c2bbba8SAndroid Build Coastguard Worker
10*1c2bbba8SAndroid Build Coastguard Worker@Generated("com.google.auto.value.processor.AutoValueProcessor")
11*1c2bbba8SAndroid Build Coastguard Workerfinal class AutoValue_Animal extends Animal {
12*1c2bbba8SAndroid Build Coastguard Worker  private final String name;
13*1c2bbba8SAndroid Build Coastguard Worker  private final int numberOfLegs;
14*1c2bbba8SAndroid Build Coastguard Worker
15*1c2bbba8SAndroid Build Coastguard Worker  private AutoValue_Animal(
16*1c2bbba8SAndroid Build Coastguard Worker      String name,
17*1c2bbba8SAndroid Build Coastguard Worker      int numberOfLegs) {
18*1c2bbba8SAndroid Build Coastguard Worker    this.name = name;
19*1c2bbba8SAndroid Build Coastguard Worker    this.numberOfLegs = numberOfLegs;
20*1c2bbba8SAndroid Build Coastguard Worker  }
21*1c2bbba8SAndroid Build Coastguard Worker
22*1c2bbba8SAndroid Build Coastguard Worker  @Override
23*1c2bbba8SAndroid Build Coastguard Worker  String name() {
24*1c2bbba8SAndroid Build Coastguard Worker    return name;
25*1c2bbba8SAndroid Build Coastguard Worker  }
26*1c2bbba8SAndroid Build Coastguard Worker
27*1c2bbba8SAndroid Build Coastguard Worker  @Override
28*1c2bbba8SAndroid Build Coastguard Worker  int numberOfLegs() {
29*1c2bbba8SAndroid Build Coastguard Worker    return numberOfLegs;
30*1c2bbba8SAndroid Build Coastguard Worker  }
31*1c2bbba8SAndroid Build Coastguard Worker
32*1c2bbba8SAndroid Build Coastguard Worker  @Override
33*1c2bbba8SAndroid Build Coastguard Worker  public String toString() {
34*1c2bbba8SAndroid Build Coastguard Worker    return "Animal{"
35*1c2bbba8SAndroid Build Coastguard Worker        + "name=" + name + ", "
36*1c2bbba8SAndroid Build Coastguard Worker        + "numberOfLegs=" + numberOfLegs
37*1c2bbba8SAndroid Build Coastguard Worker        + "}";
38*1c2bbba8SAndroid Build Coastguard Worker  }
39*1c2bbba8SAndroid Build Coastguard Worker
40*1c2bbba8SAndroid Build Coastguard Worker  @Override
41*1c2bbba8SAndroid Build Coastguard Worker  public boolean equals(Object o) {
42*1c2bbba8SAndroid Build Coastguard Worker    if (o == this) {
43*1c2bbba8SAndroid Build Coastguard Worker      return true;
44*1c2bbba8SAndroid Build Coastguard Worker    }
45*1c2bbba8SAndroid Build Coastguard Worker    if (o instanceof Animal) {
46*1c2bbba8SAndroid Build Coastguard Worker      Animal that = (Animal) o;
47*1c2bbba8SAndroid Build Coastguard Worker      return (this.name.equals(that.name()))
48*1c2bbba8SAndroid Build Coastguard Worker           && (this.numberOfLegs == that.numberOfLegs());
49*1c2bbba8SAndroid Build Coastguard Worker    }
50*1c2bbba8SAndroid Build Coastguard Worker    return false;
51*1c2bbba8SAndroid Build Coastguard Worker  }
52*1c2bbba8SAndroid Build Coastguard Worker
53*1c2bbba8SAndroid Build Coastguard Worker  @Override
54*1c2bbba8SAndroid Build Coastguard Worker  public int hashCode() {
55*1c2bbba8SAndroid Build Coastguard Worker    int h = 1;
56*1c2bbba8SAndroid Build Coastguard Worker    h *= 1000003;
57*1c2bbba8SAndroid Build Coastguard Worker    h ^= this.name.hashCode();
58*1c2bbba8SAndroid Build Coastguard Worker    h *= 1000003;
59*1c2bbba8SAndroid Build Coastguard Worker    h ^= this.numberOfLegs;
60*1c2bbba8SAndroid Build Coastguard Worker    return h;
61*1c2bbba8SAndroid Build Coastguard Worker  }
62*1c2bbba8SAndroid Build Coastguard Worker
63*1c2bbba8SAndroid Build Coastguard Worker  static final class Builder extends Animal.Builder {
64*1c2bbba8SAndroid Build Coastguard Worker    private String name;
65*1c2bbba8SAndroid Build Coastguard Worker    private Integer numberOfLegs;
66*1c2bbba8SAndroid Build Coastguard Worker
67*1c2bbba8SAndroid Build Coastguard Worker    Builder() {
68*1c2bbba8SAndroid Build Coastguard Worker    }
69*1c2bbba8SAndroid Build Coastguard Worker
70*1c2bbba8SAndroid Build Coastguard Worker    @Override
71*1c2bbba8SAndroid Build Coastguard Worker    Animal.Builder setName(String name) {
72*1c2bbba8SAndroid Build Coastguard Worker      if (name == null) {
73*1c2bbba8SAndroid Build Coastguard Worker        throw new NullPointerException("Null name");
74*1c2bbba8SAndroid Build Coastguard Worker      }
75*1c2bbba8SAndroid Build Coastguard Worker      this.name = name;
76*1c2bbba8SAndroid Build Coastguard Worker      return this;
77*1c2bbba8SAndroid Build Coastguard Worker    }
78*1c2bbba8SAndroid Build Coastguard Worker
79*1c2bbba8SAndroid Build Coastguard Worker    @Override
80*1c2bbba8SAndroid Build Coastguard Worker    Animal.Builder setNumberOfLegs(int numberOfLegs) {
81*1c2bbba8SAndroid Build Coastguard Worker      this.numberOfLegs = numberOfLegs;
82*1c2bbba8SAndroid Build Coastguard Worker      return this;
83*1c2bbba8SAndroid Build Coastguard Worker    }
84*1c2bbba8SAndroid Build Coastguard Worker
85*1c2bbba8SAndroid Build Coastguard Worker    @Override
86*1c2bbba8SAndroid Build Coastguard Worker    Animal build() {
87*1c2bbba8SAndroid Build Coastguard Worker      String missing = "";
88*1c2bbba8SAndroid Build Coastguard Worker      if (this.name == null) {
89*1c2bbba8SAndroid Build Coastguard Worker        missing += " name";
90*1c2bbba8SAndroid Build Coastguard Worker      }
91*1c2bbba8SAndroid Build Coastguard Worker      if (this.numberOfLegs == null) {
92*1c2bbba8SAndroid Build Coastguard Worker        missing += " numberOfLegs";
93*1c2bbba8SAndroid Build Coastguard Worker      }
94*1c2bbba8SAndroid Build Coastguard Worker      if (!missing.isEmpty()) {
95*1c2bbba8SAndroid Build Coastguard Worker        throw new IllegalStateException("Missing required properties:" + missing);
96*1c2bbba8SAndroid Build Coastguard Worker      }
97*1c2bbba8SAndroid Build Coastguard Worker      return new AutoValue_Animal(
98*1c2bbba8SAndroid Build Coastguard Worker          this.name,
99*1c2bbba8SAndroid Build Coastguard Worker          this.numberOfLegs);
100*1c2bbba8SAndroid Build Coastguard Worker    }
101*1c2bbba8SAndroid Build Coastguard Worker  }
102*1c2bbba8SAndroid Build Coastguard Worker}
103*1c2bbba8SAndroid Build Coastguard Worker```
104