Advertisement
Guest User

Untitled

a guest
Jan 13th, 2019
171
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 1.04 KB | None | 0 0
  1. public class Test {
  2.  
  3.     interface Option <T> {
  4.        
  5.         T get();
  6.     }
  7.  
  8.     static class None implements Option {
  9.  
  10.         public Object get() { throw new RuntimeException("wat"); }
  11.     }
  12.  
  13.     static class Some <T> implements Option <T> {
  14.  
  15.         private T thing;
  16.  
  17.         public Some(T thing) {
  18.             this.thing = thing;
  19.         }
  20.  
  21.         public T get() { return thing; }
  22.  
  23.     }
  24.  
  25.     private static <T> T getOrElse(None opt, T alternative) {
  26.         return alternative;
  27.     }
  28.  
  29.     private static <T> T getOrElse(Some<T> opt, T alternative) {
  30.         return opt.get();
  31.     }
  32.  
  33.     public static void main(String[] args) {
  34.  
  35.         Option <String> a = new Some<>("a");
  36.         Option <String> b = new None();
  37.  
  38.         // compiles and works fine
  39.         System.out.println(getOrElse((Some <String>)a, "kek"));
  40.         System.out.println(getOrElse((None) b, "kek"));
  41.  
  42.         // compile-time error
  43.         System.out.println(getOrElse(a, "kek"));
  44.         System.out.println(getOrElse(b, "kek"));
  45.     }
  46. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement