我刚刚开始学习java 8。在那里我读到lambda表达式只能应用于函数式接口(interface)。 但下面的代码是我从java站点上看到的。这里使用 MathOperation 类并使用 lambda 表达式引用其方法,而不是引用函数式接口(interface)的任何方法。如果有人帮助我理解它,那就太好了。
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));
}
}
最佳答案
Here it is using MathOperation class and referring its methods using lambda expression, not referring to any method of a functional interface.
不,此代码中的所有 lambda 表达式都实现 BiFunction<Integer, Integer, Integer>
函数接口(interface)。
允许 lambda 表达式的主体调用 MathOperation
的方法类(class)。它不必仅引用功能接口(interface)的方法。
当您希望执行由 lambda 表达式实现的函数式接口(interface)实例的方法时,您可以调用函数式接口(interface)的方法,如sub2.apply(58, 5)
.
关于java - lambda表达式只适用于函数式接口(interface)吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58787361/