java - lambda表达式只适用于函数式接口(interface)吗?

标签 java java-8

我刚刚开始学习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/

相关文章:

java - 为什么 CopyOnWriteArrayList 使用 getArray() 来访问数组引用?

Java - 根据唯一 ID 收集、删除类的属性(全部扩展父类(super class))

java - 如何使用流相互检查两个数组

java - 将 bigint postgres 数据类型隐式转换为 Java Long

java - 将数组转换为 Java 8 中具有特定范围的列表

java - Spring Boot JPA 尽管带有 MYSQL8 的 Hibernate 并未批量执行

java - 根据 java 中其他元素的内容跳过特定元素的 XSD 验证

Java Swing 应用程序不会退出

与 Java 6 相比,Java 8 较差的 GUI 性能

java - 基本java程序找不到符号错误