1package ds.util;
2
3abstract public
4 class Function2<X,Y,Z> {
5
6
7 abstract public Z apply(X x, Y y);
8
9 public Function2<Y,X,Z> flip() {
10 return
11 new Flip<Y,X,Z>(this);
12 }
13
14 private static class Flip<X,Y,Z> extends Function2<X,Y,Z> {
15 private final Function2<Y,X,Z> f;
16
17 public Flip(Function2<Y,X,Z> f) {
18 this.f = f;
19 }
20
21 public Z apply(X x, Y y) {
22 return
23 f.apply(y, x);
24 }
25 }
26}