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