class Example {
public static void main
(String[] args
) { Thingy t = new Thingy.Builder()
.withState1("one")
.withState2("two")
.withState3("three")
.build();
System.
out.
println(t.
getState()); }
}
class Thingy {
this.state = s1 + "/" + s2 + "/" + s3;
}
return this.state;
}
public static class Builder {
public Builder withState1
(String s1
) { this.state1 = s1;
return this;
}
public Builder withState2
(String s2
) { this.state2 = s2;
return this;
}
public Builder withState3
(String s3
) { this.state3 = s3;
return this;
}
public Thingy build() {
if (this.state1 == null) {
}
if (this.state2 == null) {
}
if (this.state3 == null) {
}
return new Thingy(this.state1, this.state2, this.state3);
}
}
}
Y2xhc3MgRXhhbXBsZSB7CiAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgVGhpbmd5IHQgPSBuZXcgVGhpbmd5LkJ1aWxkZXIoKQogICAgICAgICAgICAgICAgICAgIC53aXRoU3RhdGUxKCJvbmUiKQogICAgICAgICAgICAgICAgICAgIC53aXRoU3RhdGUyKCJ0d28iKQogICAgICAgICAgICAgICAgICAgIC53aXRoU3RhdGUzKCJ0aHJlZSIpCiAgICAgICAgICAgICAgICAgICAgLmJ1aWxkKCk7CiAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKHQuZ2V0U3RhdGUoKSk7CiAgICB9Cn0KY2xhc3MgVGhpbmd5IHsKICAgIHByaXZhdGUgU3RyaW5nIHN0YXRlOwoKICAgIHByaXZhdGUgVGhpbmd5KFN0cmluZyBzMSwgU3RyaW5nIHMyLCBTdHJpbmcgczMpIHsKICAgICAgICB0aGlzLnN0YXRlID0gczEgKyAiLyIgKyBzMiArICIvIiArIHMzOwogICAgfQoKICAgIHB1YmxpYyBTdHJpbmcgZ2V0U3RhdGUoKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuc3RhdGU7CiAgICB9CgogICAgcHVibGljIHN0YXRpYyBjbGFzcyBCdWlsZGVyIHsKICAgICAgICBwcml2YXRlIFN0cmluZyBzdGF0ZTEgPSBudWxsOwogICAgICAgIHByaXZhdGUgU3RyaW5nIHN0YXRlMiA9IG51bGw7CiAgICAgICAgcHJpdmF0ZSBTdHJpbmcgc3RhdGUzID0gbnVsbDsKCiAgICAgICAgcHVibGljIEJ1aWxkZXIgd2l0aFN0YXRlMShTdHJpbmcgczEpIHsKICAgICAgICAgICAgdGhpcy5zdGF0ZTEgPSBzMTsKICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgICAgfQoKICAgICAgICBwdWJsaWMgQnVpbGRlciB3aXRoU3RhdGUyKFN0cmluZyBzMikgewogICAgICAgICAgICB0aGlzLnN0YXRlMiA9IHMyOwogICAgICAgICAgICByZXR1cm4gdGhpczsKICAgICAgICB9CgogICAgICAgIHB1YmxpYyBCdWlsZGVyIHdpdGhTdGF0ZTMoU3RyaW5nIHMzKSB7CiAgICAgICAgICAgIHRoaXMuc3RhdGUzID0gczM7CiAgICAgICAgICAgIHJldHVybiB0aGlzOwogICAgICAgIH0KCiAgICAgICAgcHVibGljIFRoaW5neSBidWlsZCgpIHsKICAgICAgICAgICAgaWYgKHRoaXMuc3RhdGUxID09IG51bGwpIHsKICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oInN0YXRlMSBpcyByZXF1aXJlZCIpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmICh0aGlzLnN0YXRlMiA9PSBudWxsKSB7CiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKCJzdGF0ZTIgaXMgcmVxdWlyZWQiKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAodGhpcy5zdGF0ZTMgPT0gbnVsbCkgewogICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigic3RhdGUzIGlzIHJlcXVpcmVkIik7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuIG5ldyBUaGluZ3kodGhpcy5zdGF0ZTEsIHRoaXMuc3RhdGUyLCB0aGlzLnN0YXRlMyk7CiAgICAgICAgfQogICAgfQp9