fork(1) download
  1. import java.util.function.Function;
  2. import java.util.stream.Stream;
  3.  
  4. @FunctionalInterface
  5. interface Selector<TYPE> {
  6. Object $get(Function<TYPE, Object> fun);
  7.  
  8. @SuppressWarnings("unchecked")
  9. public default <VALUE> VALUE get(Function<TYPE, VALUE> fun) {
  10. return (VALUE) $get(
  11. (Function<TYPE, Object>) fun
  12. );
  13. }
  14.  
  15. public default TYPE from(Selector<TYPE> selector) {
  16. throw new InternalError("Selector::from is not implemented.");
  17. }
  18.  
  19. public default <VALUE> TYPE with(Function<TYPE, ? extends VALUE> fun, VALUE value) {
  20. return from(f -> (f == fun)
  21. ? value
  22. : get(f)
  23. );
  24. }
  25. }
  26.  
  27. @FunctionalInterface
  28. interface $Point extends Point, Selector<Point> {
  29. public static final Function<Point, Integer> X = Point::getX;
  30. public static final Function<Point, Integer> Y = Point::getY;
  31.  
  32. @Override
  33. public default int getX() {
  34. return get(X);
  35. }
  36.  
  37. @Override
  38. public default int getY() {
  39. return get(Y);
  40. }
  41.  
  42. @Override
  43. public default Point withX(int x) {
  44. return with(X, x);
  45. }
  46.  
  47. @Override
  48. public default Point withY(int y) {
  49. return with(Y, y);
  50. }
  51.  
  52. @Override
  53. public default Point from(Selector<Point> selector) {
  54. return ($Point) selector::get;
  55. }
  56.  
  57. public static $Point none() {
  58. return f -> {
  59. throw new IllegalStateException("no value");
  60. };
  61. }
  62. }
  63.  
  64. interface Point {
  65. public int getX();
  66. public int getY();
  67.  
  68. public Point withX(int x);
  69. public Point withY(int y);
  70.  
  71. public static Point none() {
  72. return $Point.none();
  73. }
  74.  
  75. public static void main(String[] args) {
  76. Point point = none()
  77. .withX(3)
  78. .withY(4)
  79. ;
  80. Stream.of(
  81. point.getX(),
  82. point.getY()
  83. )
  84. .forEach(System.out::println)
  85. ;
  86. }
  87. }
  88.  
  89. public interface Main {
  90. public static void main(String... arguments) {
  91. Point.main(arguments);
  92. }
  93. }
Compilation error #stdin compilation error #stdout 0s 0KB
stdin
Standard input is empty
compilation info
Main.java:9: error: illegal start of type
  public default <VALUE> VALUE get(Function<TYPE, VALUE> fun) {
         ^
Main.java:9: error: = expected
  public default <VALUE> VALUE get(Function<TYPE, VALUE> fun) {
                 ^
Main.java:9: error: ';' expected
  public default <VALUE> VALUE get(Function<TYPE, VALUE> fun) {
                  ^
Main.java:9: error: illegal start of type
  public default <VALUE> VALUE get(Function<TYPE, VALUE> fun) {
                       ^
Main.java:9: error: = expected
  public default <VALUE> VALUE get(Function<TYPE, VALUE> fun) {
                               ^
Main.java:9: error: illegal start of type
  public default <VALUE> VALUE get(Function<TYPE, VALUE> fun) {
                                  ^
Main.java:9: error: = expected
  public default <VALUE> VALUE get(Function<TYPE, VALUE> fun) {
                                           ^
Main.java:9: error: <identifier> expected
  public default <VALUE> VALUE get(Function<TYPE, VALUE> fun) {
                                                ^
Main.java:9: error: ';' expected
  public default <VALUE> VALUE get(Function<TYPE, VALUE> fun) {
                                                 ^
Main.java:9: error: illegal start of type
  public default <VALUE> VALUE get(Function<TYPE, VALUE> fun) {
                                                       ^
Main.java:9: error: = expected
  public default <VALUE> VALUE get(Function<TYPE, VALUE> fun) {
                                                            ^
Main.java:9: error: illegal start of type
  public default <VALUE> VALUE get(Function<TYPE, VALUE> fun) {
                                                              ^
Main.java:9: error: <identifier> expected
  public default <VALUE> VALUE get(Function<TYPE, VALUE> fun) {
                                                               ^
Main.java:10: error: <identifier> expected
    return (VALUE) $get(
                 ^
Main.java:10: error: ';' expected
    return (VALUE) $get(
                  ^
Main.java:11: error: illegal start of type
      (Function<TYPE, Object>) fun
                             ^
Main.java:11: error: '(' expected
      (Function<TYPE, Object>) fun
                               ^
Main.java:12: error: illegal start of type
    );
    ^
Main.java:12: error: <identifier> expected
    );
     ^
Main.java:13: error: = expected
  }
  ^
Main.java:13: error: ';' expected
  }
   ^
Main.java:15: error: illegal start of type
  public default TYPE from(Selector<TYPE> selector) {
         ^
Main.java:15: error: = expected
  public default TYPE from(Selector<TYPE> selector) {
                      ^
Main.java:15: error: illegal start of type
  public default TYPE from(Selector<TYPE> selector) {
                          ^
Main.java:15: error: = expected
  public default TYPE from(Selector<TYPE> selector) {
                                   ^
Main.java:15: error: <identifier> expected
  public default TYPE from(Selector<TYPE> selector) {
                                        ^
Main.java:15: error: ';' expected
  public default TYPE from(Selector<TYPE> selector) {
                                         ^
Main.java:15: error: illegal start of type
  public default TYPE from(Selector<TYPE> selector) {
                                                  ^
Main.java:15: error: <identifier> expected
  public default TYPE from(Selector<TYPE> selector) {
                                                   ^
Main.java:16: error: = expected
    throw new InternalError("Selector::from is not implemented.");
    ^
Main.java:16: error: ';' expected
    throw new InternalError("Selector::from is not implemented.");
         ^
Main.java:16: error: <identifier> expected
    throw new InternalError("Selector::from is not implemented.");
                           ^
Main.java:16: error: illegal start of type
    throw new InternalError("Selector::from is not implemented.");
                            ^
Main.java:19: error: class, interface, or enum expected
  public default <VALUE> TYPE with(Function<TYPE, ? extends VALUE> fun, VALUE value) {
         ^
Main.java:24: error: class, interface, or enum expected
  }
  ^
Main.java:29: error: ';' expected
  public static final Function<Point, Integer> X = Point::getX;
                                                        ^
Main.java:29: error: <identifier> expected
  public static final Function<Point, Integer> X = Point::getX;
                                                              ^
Main.java:29: error: ';' expected
  public static final Function<Point, Integer> X = Point::getX;
                                                               ^
Main.java:30: error: ';' expected
  public static final Function<Point, Integer> Y = Point::getY;
                                                        ^
Main.java:30: error: <identifier> expected
  public static final Function<Point, Integer> Y = Point::getY;
                                                              ^
Main.java:30: error: ';' expected
  public static final Function<Point, Integer> Y = Point::getY;
                                                               ^
Main.java:32: error: <identifier> expected
  @Override
           ^
Main.java:33: error: = expected
  public default int getX() {
  ^
Main.java:33: error: ';' expected
  public default int getX() {
        ^
Main.java:38: error: illegal start of type
  public default int getY() {
         ^
Main.java:38: error: = expected
  public default int getY() {
                 ^
Main.java:38: error: ';' expected
  public default int getY() {
                    ^
Main.java:38: error: illegal start of type
  public default int getY() {
                         ^
Main.java:38: error: <identifier> expected
  public default int getY() {
                          ^
Main.java:38: error: = expected
  public default int getY() {
                            ^
Main.java:38: error: ';' expected
  public default int getY() {
                             ^
Main.java:39: error: <identifier> expected
    return get(Y);
              ^
Main.java:39: error: <identifier> expected
    return get(Y);
                ^
Main.java:43: error: class, interface, or enum expected
  public default Point withX(int x) {
         ^
Main.java:45: error: class, interface, or enum expected
  }
  ^
Main.java:48: error: class, interface, or enum expected
  public default Point withY(int y) {
         ^
Main.java:50: error: class, interface, or enum expected
  }
  ^
Main.java:53: error: class, interface, or enum expected
  public default Point from(Selector<Point> selector) {
         ^
Main.java:55: error: class, interface, or enum expected
  }
  ^
Main.java:57: error: class, interface, or enum expected
  public static $Point none() {
                ^
Main.java:60: error: class, interface, or enum expected
    };
    ^
Main.java:61: error: class, interface, or enum expected
  }
  ^
Main.java:84: error: ')' expected
      .forEach(System.out::println)
                         ^
Main.java:84: error: illegal start of expression
      .forEach(System.out::println)
                          ^
Main.java:84: error: ';' expected
      .forEach(System.out::println)
                                  ^
65 errors
stdout
Standard output is empty