Created
February 26, 2019 18:08
-
-
Save emanon-was/0d88cfb3804d57c473a355993a161fc2 to your computer and use it in GitHub Desktop.
This file contains hidden or 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
import java.util.Optional; | |
public abstract class Result<T,E extends Throwable> { | |
public static <T,E extends Throwable> Ok<T,E> ok(T a) { return new Ok(a); } | |
public static <T,E extends Throwable> Err<T,E> err(E a) { return new Err(a); } | |
public abstract T unwrap() throws E; | |
public abstract boolean isOk(); | |
public abstract boolean isErr(); | |
public abstract Optional<T> getValue(); | |
public abstract Optional<E> getError(); | |
public static final class Ok<T,E extends Throwable> extends Result<T,E> { | |
private final T val; | |
public Ok(T val) { this.val = val; } | |
public T unwrap() throws E { return this.val; } | |
public boolean isOk() { return true; } | |
public boolean isErr() { return false; } | |
public Optional<T> getValue() { return Optional.ofNullable(this.val); } | |
public Optional<E> getError() { return Optional.empty(); } | |
@Override | |
public String toString() { return getClass().getName() + "[" + val + "]"; } | |
} | |
public static final class Err<T,E extends Throwable> extends Result<T,E> { | |
private final E err; | |
public Err(E err) { this.err = err; } | |
public T unwrap() throws E { throw this.err; } | |
public boolean isOk() { return false; } | |
public boolean isErr() { return true; } | |
public Optional<T> getValue() { return Optional.empty(); } | |
public Optional<E> getError() { return Optional.ofNullable(this.err); } | |
@Override | |
public String toString() { return getClass().getName() + "[" + err + "]"; } | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment