Lambdas sind ein reines Call-Site-Konstrukt: Der Empfänger des Lambdas braucht nicht zu wissen, dass es sich um ein Lambda handelt, sondern akzeptiert eine Schnittstelle mit der entsprechenden Methode.
Mit anderen Worten: Sie definieren oder verwenden eine funktionale Schnittstelle (d. h. eine Schnittstelle mit einer einzigen Methode), die genau das annimmt und zurückgibt, was Sie wollen.
Seit Java 8 gibt es eine Reihe von häufig verwendeten Schnittstellentypen in java.util.function
.
Für diesen speziellen Anwendungsfall gibt es java.util.function.IntBinaryOperator
con eine einzige int applyAsInt(int left, int right)
Methode schreiben, damit Sie Ihre method
wie diese:
static int method(IntBinaryOperator op){
return op.applyAsInt(5, 10);
}
Sie können aber genauso gut Ihre eigene Schnittstelle definieren und sie so verwenden:
public interface TwoArgIntOperator {
public int op(int a, int b);
}
//elsewhere:
static int method(TwoArgIntOperator operator) {
return operator.op(5, 10);
}
Dann rufen Sie die Methode mit einem Lambda als Parameter auf:
public static void main(String[] args) {
TwoArgIntOperator addTwoInts = (a, b) -> a + b;
int result = method(addTwoInts);
System.out.println("Result: " + result);
}
Die Verwendung einer eigenen Schnittstelle hat den Vorteil, dass Sie Namen verwenden können, die die Absicht deutlicher machen.