Created
June 22, 2016 22:29
-
-
Save DeepSpawn/eac6651d336f620405907607c509741f to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public abstract class Json { | |
private Json() { | |
} | |
public abstract <T> T match(Function<Jseq, T> a, | |
Function<Jobj, T> b, | |
Function<Jnumber, T> c, | |
Function<Jstring, T> d, | |
Function<Jboolean, T> e, | |
Function<JNull, T> f | |
); | |
public static final class Jseq extends Json { | |
private final List<Json> elems; | |
public Jseq(final List<Json> elems) { | |
this.elems = elems; | |
} | |
public List<Json> getElems() { | |
return elems; | |
} | |
@Override | |
public <T> T match(final Function<Jseq, T> a, | |
final Function<Jobj, T> b, | |
final Function<Jnumber, T> c, | |
final Function<Jstring, T> d, | |
final Function<Jboolean, T> e, | |
final Function<JNull, T> f) { | |
return a.apply(this); | |
} | |
} | |
public static final class Jobj extends Json { | |
private final Map<String, Json> members; | |
public Jobj(final Map<String, Json> members) { | |
this.members = members; | |
} | |
public Map<String, Json> getMembers() { | |
return members; | |
} | |
@Override | |
public <T> T match(final Function<Jseq, T> a, | |
final Function<Jobj, T> b, | |
final Function<Jnumber, T> c, | |
final Function<Jstring, T> d, | |
final Function<Jboolean, T> e, | |
final Function<JNull, T> f) { | |
return b.apply(this); | |
} | |
} | |
public static final class Jnumber extends Json { | |
private final Double num; | |
public Jnumber(final double num) { | |
this.num = num; | |
} | |
public Double getNum() { | |
return num; | |
} | |
@Override | |
public <T> T match(final Function<Jseq, T> a, | |
final Function<Jobj, T> b, | |
final Function<Jnumber, T> c, | |
final Function<Jstring, T> d, | |
final Function<Jboolean, T> e, | |
final Function<JNull, T> f) { | |
return c.apply(this); | |
} | |
} | |
public static final class Jstring extends Json { | |
private final String str; | |
public Jstring(final String str) { | |
this.str = str; | |
} | |
public String getStr() { | |
return str; | |
} | |
@Override | |
public <T> T match(final Function<Jseq, T> a, | |
final Function<Jobj, T> b, | |
final Function<Jnumber, T> c, | |
final Function<Jstring, T> d, | |
final Function<Jboolean, T> e, | |
final Function<JNull, T> f) { | |
return d.apply(this); | |
} | |
} | |
public static final class Jboolean extends Json { | |
private final Boolean b; | |
public Jboolean(final Boolean b) { | |
this.b = b; | |
} | |
public Boolean getB() { | |
return b; | |
} | |
@Override | |
public <T> T match(final Function<Jseq, T> a, | |
final Function<Jobj, T> b, | |
final Function<Jnumber, T> c, | |
final Function<Jstring, T> d, | |
final Function<Jboolean, T> e, | |
final Function<JNull, T> f) { | |
return e.apply(this); | |
} | |
} | |
public static final class JNull extends Json { | |
public JNull() { | |
} | |
@Override | |
public <T> T match(final Function<Jseq, T> a, | |
final Function<Jobj, T> b, | |
final Function<Jnumber, T> c, | |
final Function<Jstring, T> d, | |
final Function<Jboolean, T> e, | |
final Function<JNull, T> f) { | |
return f.apply(this); | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment