2015-05-04 02:57:38 +00:00
|
|
|
public class InvokeDynamic {
|
2015-08-06 19:24:06 +00:00
|
|
|
private final int foo;
|
|
|
|
|
|
|
|
private InvokeDynamic(int foo) {
|
|
|
|
this.foo = foo;
|
|
|
|
}
|
2016-12-05 03:53:40 +00:00
|
|
|
|
2015-08-05 21:55:52 +00:00
|
|
|
private interface Operation {
|
|
|
|
int operate(int a, int b);
|
|
|
|
}
|
2015-05-04 02:57:38 +00:00
|
|
|
|
2016-12-05 03:53:40 +00:00
|
|
|
private interface Operation2 {
|
|
|
|
long operate(long a, int b);
|
|
|
|
}
|
|
|
|
|
|
|
|
private static class Pair<A, B> {
|
|
|
|
public final A first;
|
|
|
|
public final B second;
|
|
|
|
|
|
|
|
public Pair(A first, B second) {
|
|
|
|
this.first = first;
|
|
|
|
this.second = second;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
private interface Supplier<T> extends java.io.Serializable {
|
|
|
|
T get();
|
|
|
|
}
|
|
|
|
|
2015-08-05 21:55:52 +00:00
|
|
|
private static void expect(boolean v) {
|
|
|
|
if (! v) throw new RuntimeException();
|
|
|
|
}
|
2016-12-05 03:53:40 +00:00
|
|
|
|
2015-05-04 02:57:38 +00:00
|
|
|
public static void main(String[] args) {
|
2015-08-05 21:55:52 +00:00
|
|
|
int c = 4;
|
|
|
|
Operation op = (a, b) -> a + b - c;
|
2015-08-06 19:24:06 +00:00
|
|
|
expect(op.operate(2, 3) == (2 + 3) - 4);
|
|
|
|
|
2015-08-06 23:22:14 +00:00
|
|
|
for (int i = 0; i < 4; ++i) {
|
|
|
|
new InvokeDynamic(i).test();
|
|
|
|
}
|
2015-08-06 19:24:06 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
private void test() {
|
2016-12-05 03:53:40 +00:00
|
|
|
{ int c = 2;
|
|
|
|
Operation op = (a, b) -> ((a + b) * c) - foo;
|
|
|
|
expect(op.operate(2, 3) == ((2 + 3) * 2) - foo);
|
|
|
|
}
|
|
|
|
|
|
|
|
{ int c = 2;
|
|
|
|
Operation2 op = (a, b) -> ((a + b) * c) - foo;
|
|
|
|
expect(op.operate(2, 3) == ((2 + 3) * 2) - foo);
|
|
|
|
}
|
|
|
|
|
|
|
|
{ Supplier<Pair<Long, Double>> s = () -> new Pair<Long, Double>(42L, 77.1D);
|
|
|
|
expect(s.get().first == 42L);
|
|
|
|
expect(s.get().second == 77.1D);
|
|
|
|
}
|
2015-05-04 02:57:38 +00:00
|
|
|
}
|
|
|
|
}
|