Java 7 - Currying mit MethodHandles

Thomas Darimont

Erfahrenes Mitglied
Hallo,

im folgenden Beispiel kann man sehen wie man mit MethodHandles Function Currying (http://de.wikipedia.org/wiki/Currying) realisieren kann.
Die sum-Methode gibt es erst ab JDK 8 - Wenn man das Beispiel mit Java 7 ausprobieren möchte kann könnte man Beispielsweise alternativ dazu auch mit der - Math.max(..) - Method arbeiten.
Schaut mal hier:
Java:
package de.tutorials.training;

import java.lang.invoke.MethodHandle;
import java.lang.invoke.MethodHandles;
import java.lang.invoke.MethodType;

/**
 * Author: tom
 */
public class MethodHandleCurryingExample {
    public static void main(String[] args) throws Throwable {
        MethodHandles.Lookup lookup = MethodHandles.lookup();
        MethodHandle sum = lookup.findStatic(Integer.class, "sum", MethodType.methodType(int.class, new Class[]{int.class, int.class}));
        //Currying
        MethodHandle plus1 = MethodHandles.insertArguments(sum,0,1);
        int result = (int) plus1.invokeExact(2);
        System.out.println(result); // Output: 3
    }
}

Gruß Tom