public class Compose { // Java doesn't have function type so we define an interface // of function objects instead public interface Fun { B call(A x); } public static Fun compose(final Fun f, final Fun g) { return new Fun() { public C call(A x) { return f.call(g.call(x)); } }; } public static void main(String[] args) { Fun sin = new Fun() { public Double call(Double x) { return Math.sin(x); } }; Fun asin = new Fun() { public Double call(Double x) { return Math.asin(x); } }; Fun sin_asin = compose(sin, asin); System.out.println(sin_asin.call(0.5)); // prints "0.5" } }