我刚刚开始学习Java8。在这里我读到lambda表达式只能应用于功能接口。但是下面的代码,我从一个Java站点看到。在这里,它使用MathOperation类,并使用lambda表达式引用其方法,而不是引用功能接口的任何方法。如果有人帮助我理解它,那就太好了。
package com.jcg.java;
import java.util.function.BiFunction;
class MathOperation {
/**** Addition ****/
public int add(int a, int b) {
return a + b;
}
/**** Subtraction ****/
public int sub(int a, int b) {
return a - b;
}
}
/***** Reference To An Instance Method Of A Particular Object *****/
public class MethodReferenceEx2 {
public static void main(String[] args) {
MathOperation op = new MathOperation();
/**** Using Lambda Expression ****/
System.out.println("--------------------Using Lambda Expression----------------------");
BiFunction<Integer, Integer, Integer> add1 = (a, b) -> op.add(a, b);
System.out.println("Addtion = " + add1.apply(4, 5));
BiFunction<Integer, Integer, Integer> sub1 = (a, b) -> op.sub(a, b);
System.out.println("Subtraction = " + sub1.apply(58, 5));
/**** Using Method Reference ****/
System.out.println("\n---------------------Using Method Reference---------------------");
BiFunction<Integer, Integer, Integer> add2 = op::add;
System.out.println("Addtion = " + add2.apply(4, 5));
BiFunction<Integer, Integer, Integer> sub2 = op::sub;
System.out.println("Subtraction = " + sub2.apply(58, 5));
}
}
这里使用MathOperation类,并使用lambda表达式引用其方法,而不是引用功能接口的任何方法。
否,此代码中的所有lambda表达式都实现BiFunction<Integer, Integer, Integer>
函数接口。
允许lambda表达式的主体调用MathOperation
类的方法。