Skip to content

Instantly share code, notes, and snippets.

@jonaslindmark
Created January 14, 2016 15:11

Revisions

  1. jonaslindmark created this gist Jan 14, 2016.
    50 changes: 50 additions & 0 deletions Test.java
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,50 @@
    import static com.google.common.base.Preconditions.checkArgument;

    public class MyObject {
    public final String name;
    public final String wat;

    private MyObject(String name, String wat) {
    this.name = name;
    this.wat = wat;
    }

    public static BuildName newBuilder() {
    return new Builder();
    }

    public interface BuildObj {
    MyObject build();
    }

    public interface BuildName {
    BuildWat setName(String name);
    }

    public interface BuildWat {
    BuildObj setWat(String name);
    }

    public static class Builder implements BuildWat, BuildName, BuildObj {
    private String name;
    private String wat;

    private Builder() {}

    public BuildWat setName(String name) {
    checkArgument(name != null);
    this.name = name;
    return this;
    }

    public BuildObj setWat(String wat) {
    checkArgument(wat != null);
    this.wat = wat;
    return this;
    }

    public MyObject build() {
    return new MyObject(name, wat);
    }
    }
    }