Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public class Test {
- interface Option <T> {
- T get();
- }
- static class None implements Option {
- public Object get() { throw new RuntimeException("wat"); }
- }
- static class Some <T> implements Option <T> {
- private T thing;
- public Some(T thing) {
- this.thing = thing;
- }
- public T get() { return thing; }
- }
- private static <T> T getOrElse(None opt, T alternative) {
- return alternative;
- }
- private static <T> T getOrElse(Some<T> opt, T alternative) {
- return opt.get();
- }
- public static void main(String[] args) {
- Option <String> a = new Some<>("a");
- Option <String> b = new None();
- // compiles and works fine
- System.out.println(getOrElse((Some <String>)a, "kek"));
- System.out.println(getOrElse((None) b, "kek"));
- // compile-time error
- System.out.println(getOrElse(a, "kek"));
- System.out.println(getOrElse(b, "kek"));
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement