import java.util.function.Function;
import java.util.stream.Stream;
@FunctionalInterface
interface Selector<TYPE> {
Object $get
(Function
<TYPE, Object
> fun
);
@SuppressWarnings("unchecked")
public default <VALUE> VALUE get(Function<TYPE, VALUE> fun) {
return (VALUE) $get(
(Function<TYPE, Object>) fun
);
}
public default TYPE from(Selector<TYPE> selector) {
}
public default <VALUE> TYPE with(Function<TYPE, ? extends VALUE> fun, VALUE value) {
return from(f -> (f == fun)
? value
: get(f)
);
}
}
@FunctionalInterface
interface $Point
extends Point, Selector
<Point
> { public static final Function
<Point, Integer
> X
= Point::getX
; public static final Function
<Point, Integer
> Y
= Point::getY
;
@Override
public default int getX() {
return get(X);
}
@Override
public default int getY() {
return get(Y);
}
@Override
public default Point withX
(int x
) { return with(X, x);
}
@Override
public default Point withY
(int y
) { return with(Y, y);
}
@Override
public default Point from
(Selector
<Point
> selector
) { return ($Point) selector::get;
}
public static $Point none() {
return f -> {
};
}
}
public int getX();
public int getY();
public Point withX
(int x
); public Point withY
(int y
);
public static Point none
() { return $Point.none();
}
public static void main
(String[] args
) { .withX(3)
.withY(4)
;
Stream.of(
point.getX(),
point.getY()
)
;
}
}
public interface Main {
public static void main
(String...
arguments) { }
}
aW1wb3J0IGphdmEudXRpbC5mdW5jdGlvbi5GdW5jdGlvbjsKaW1wb3J0IGphdmEudXRpbC5zdHJlYW0uU3RyZWFtOwoKQEZ1bmN0aW9uYWxJbnRlcmZhY2UKaW50ZXJmYWNlIFNlbGVjdG9yPFRZUEU+IHsKICBPYmplY3QgJGdldChGdW5jdGlvbjxUWVBFLCBPYmplY3Q+IGZ1bik7CgogIEBTdXBwcmVzc1dhcm5pbmdzKCJ1bmNoZWNrZWQiKQogIHB1YmxpYyBkZWZhdWx0IDxWQUxVRT4gVkFMVUUgZ2V0KEZ1bmN0aW9uPFRZUEUsIFZBTFVFPiBmdW4pIHsKICAgIHJldHVybiAoVkFMVUUpICRnZXQoCiAgICAgIChGdW5jdGlvbjxUWVBFLCBPYmplY3Q+KSBmdW4KICAgICk7CiAgfQoKICBwdWJsaWMgZGVmYXVsdCBUWVBFIGZyb20oU2VsZWN0b3I8VFlQRT4gc2VsZWN0b3IpIHsKICAgIHRocm93IG5ldyBJbnRlcm5hbEVycm9yKCJTZWxlY3Rvcjo6ZnJvbSBpcyBub3QgaW1wbGVtZW50ZWQuIik7CiAgfQoKICBwdWJsaWMgZGVmYXVsdCA8VkFMVUU+IFRZUEUgd2l0aChGdW5jdGlvbjxUWVBFLCA/IGV4dGVuZHMgVkFMVUU+IGZ1biwgVkFMVUUgdmFsdWUpIHsKICAgIHJldHVybiBmcm9tKGYgLT4gKGYgPT0gZnVuKQogICAgICA/IHZhbHVlCiAgICAgIDogZ2V0KGYpCiAgICApOwogIH0KfQoKQEZ1bmN0aW9uYWxJbnRlcmZhY2UKaW50ZXJmYWNlICRQb2ludCBleHRlbmRzIFBvaW50LCBTZWxlY3RvcjxQb2ludD4gewogIHB1YmxpYyBzdGF0aWMgZmluYWwgRnVuY3Rpb248UG9pbnQsIEludGVnZXI+IFggPSBQb2ludDo6Z2V0WDsKICBwdWJsaWMgc3RhdGljIGZpbmFsIEZ1bmN0aW9uPFBvaW50LCBJbnRlZ2VyPiBZID0gUG9pbnQ6OmdldFk7CgogIEBPdmVycmlkZQogIHB1YmxpYyBkZWZhdWx0IGludCBnZXRYKCkgewogICAgcmV0dXJuIGdldChYKTsKICB9CgogIEBPdmVycmlkZQogIHB1YmxpYyBkZWZhdWx0IGludCBnZXRZKCkgewogICAgcmV0dXJuIGdldChZKTsKICB9CgogIEBPdmVycmlkZQogIHB1YmxpYyBkZWZhdWx0IFBvaW50IHdpdGhYKGludCB4KSB7CiAgICByZXR1cm4gd2l0aChYLCB4KTsKICB9CgogIEBPdmVycmlkZQogIHB1YmxpYyBkZWZhdWx0IFBvaW50IHdpdGhZKGludCB5KSB7CiAgICByZXR1cm4gd2l0aChZLCB5KTsKICB9CgogIEBPdmVycmlkZQogIHB1YmxpYyBkZWZhdWx0IFBvaW50IGZyb20oU2VsZWN0b3I8UG9pbnQ+IHNlbGVjdG9yKSB7CiAgICByZXR1cm4gKCRQb2ludCkgc2VsZWN0b3I6OmdldDsKICB9CgogIHB1YmxpYyBzdGF0aWMgJFBvaW50IG5vbmUoKSB7CiAgICByZXR1cm4gZiAtPiB7CiAgICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oIm5vIHZhbHVlIik7CiAgICB9OwogIH0KfQoKaW50ZXJmYWNlIFBvaW50IHsKICBwdWJsaWMgaW50IGdldFgoKTsKICBwdWJsaWMgaW50IGdldFkoKTsKCiAgcHVibGljIFBvaW50IHdpdGhYKGludCB4KTsKICBwdWJsaWMgUG9pbnQgd2l0aFkoaW50IHkpOwoKICBwdWJsaWMgc3RhdGljIFBvaW50IG5vbmUoKSB7CiAgICByZXR1cm4gJFBvaW50Lm5vbmUoKTsKICB9CgogIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgIFBvaW50IHBvaW50ID0gbm9uZSgpCiAgICAgIC53aXRoWCgzKQogICAgICAud2l0aFkoNCkKICAgIDsKICAgIFN0cmVhbS5vZigKICAgICAgcG9pbnQuZ2V0WCgpLAogICAgICBwb2ludC5nZXRZKCkKICAgICkKICAgICAgLmZvckVhY2goU3lzdGVtLm91dDo6cHJpbnRsbikKICAgIDsKICB9Cn0KCnB1YmxpYyBpbnRlcmZhY2UgTWFpbiB7CiAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nLi4uIGFyZ3VtZW50cykgewogICAgUG9pbnQubWFpbihhcmd1bWVudHMpOwogIH0KfQ==
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