Lambda_04 函数表达式引用静态方法,非静态方法 |8月更文挑战

215 阅读1分钟

这是我参与8月更文挑战的第19天,活动详情查看:8月更文挑战

 Lambda函数表达式引用方法

1、前提条件:实现接口的入参、返回值类型与接口的抽象方法一致  

创建内部接口  

LambdaInterface51 添加加法interfaceSum抽象方法

LambdaInterface52 添加减法interfaceSub抽象方法、

可以添加@FunctionalInterface 注释

2、Lambda引用静态方法

创建静态方法

public static int sum (int a,int b){
        return a+b;
    }

调用静态方法

Lambda05::sum; 函数Lambda05的静态方法sum;

        /**
         * 静态方法Lambda表达式 1
         */
        LambdaInterface51 lambdaInterface510 = (int a,int b)->sum(a,b);
        int sum = lambdaInterface510.interfaceSum(2, 3);
        System.out.println(sum);

        /**
         * 静态方法Lambda表达式 2
         */
        LambdaInterface51 lambdaInterface511 = Lambda05::sum;
        int sum511 = lambdaInterface511.interfaceSum(7, 8);
        System.out.println(sum511);

3、Lambda引用非静态(对象)

创建非静态方法

    public int sub(int a,int b){
        return a - b;
    }

方法调用

        /**
         * 对象方法 Lambda表达式1
         * LambdaInterface52 lambdaInterface52 = refM::sub;
         * 含义:定义接口 LambdaInterface52的实现为 对象refM的sub方法
         */
        Lambda05 refM = new Lambda05();
        LambdaInterface52 lambdaInterface52 = refM::sub;
        int sub = lambdaInterface52.interfaceSub(5,2);
        System.out.println(sub);

代码示例:

/**
 * @author lingyiwin
 * @version 1.0
 * @date 2020/10/25 22:32
 * Lambda函数表达式引用方法
 * 前提条件:实现接口的入参、返回值类型与接口的抽象方法一致
 * Lambda引用静态方法
 * Lambda引用非静态(对象)
 */
public class Lambda05 {
    public static void main(String[] args) {
        /**
         * 静态方法Lambda表达式 1
         */
        LambdaInterface51 lambdaInterface510 = (int a,int b)->sum(a,b);
        int sum = lambdaInterface510.interfaceSum(2, 3);
        System.out.println(sum);

        /**
         * 静态方法Lambda表达式 2
         */
        LambdaInterface51 lambdaInterface511 = Lambda05::sum;
        int sum511 = lambdaInterface511.interfaceSum(7, 8);
        System.out.println(sum511);

        /**
         * 对象方法 Lambda表达式1
         * LambdaInterface52 lambdaInterface52 = refM::sub;
         * 含义:定义接口 LambdaInterface52的实现为 对象refM的sub方法
         */
        Lambda05 refM = new Lambda05();
        LambdaInterface52 lambdaInterface52 = refM::sub;
        int sub = lambdaInterface52.interfaceSub(5,2);
        System.out.println(sub);
    }

    public static int sum (int a,int b){
        return a+b;
    }

    public int sub(int a,int b){
        return a - b;
    }
}

interface LambdaInterface51{
    public int interfaceSum(int a,int b);
}

interface LambdaInterface52{
    public int interfaceSub(int a,int b);
}