lambda表达式仅适用于功能接口吗?

问题描述 投票:0回答:1

我刚刚开始学习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));
    }
}
java-8
1个回答
0
投票

这里使用MathOperation类,并使用lambda表达式引用其方法,而不是引用功能接口的任何方法。

否,此代码中的所有lambda表达式都实现BiFunction<Integer, Integer, Integer>函数接口。

允许lambda表达式的主体调用MathOperation类的方法。

© www.soinside.com 2019 - 2024. All rights reserved.