java Lambda表达式方法引用详细介绍

KLQ 2020-09-08 10:11:40 java常见问答 4522

方法引用也可以理解成Lambda表达式的快捷写法,它要比Lambda表达式更加的简洁,可读性更高,有很好的重用性,下面就再一起详细的来了解一下吧。

假如,实现比较的简单,复用的地方又少,那么就推荐使用Lambda表达式,反之的话就应该使用方法引用。

Java 8 之后增加了双冒号::运算符这个运算符用于方法引用,这里要注意一下了,并不是调用方法,方法引用虽然没有直接使用Lambda表达式,可是,也和Lambda表达式有关,和函数式接口有关。

下面是方法引用的语法格式:(ObjectRef是类名或者实例名,methodName是相应的方法名)

注意一下,被引用方法的参数列表和返回值类型,必须和函数式接口方法参数列表和方法返回值类型一致。

示例代码:

public class LambdaDemo
{
    // 静态方法,进行加法运算
    // 参数列表要与函数式接口方法calculateInt(int a, int b)兼容
    public static int add(int a, int b)
    {
        return a + b;
    }
    // 实例方法,进行减法运算
    // 参数列表要与函数式接口方法calculateInt(int a, int b)兼容
    public int sub(int a, int b)
    {
        return a - b;
    }
}

LambdaDemo类当中,提供了一个静态方法add,一个实例方法sub,这两个方法必须和函数式接口方法参数列表一致,方法返回值类型也要保持一致。

public class HelloWorld
{
    public static void main(String[] args)
    {
        int n1 = 10;
        int n2 = 5;
        // 打印加法计算结果
        display(LambdaDemo::add, n1, n2);
        LambdaDemo d = new LambdaDemo();
        // 打印减法计算结果 
        display(d::sub, n1, n2);
    }
    /**
     * 打印计算结果
     *
     * @param calc Lambda表达式
     * @param n1   操作数1
     * @param n2   操作数2
     */
    public static void display(Calculable calc, int n1, int n2)
    {
        System.out.println(calc.calculateInt(n1, n2));
    }
}

注意,代码第18行声明display方法,第一个参数calc是Calculable类型。

它能够接受三种对象:

1、Calculable实现对象;

2、Lambda表达式;

3、方法引用;

代码第6行中第一个实际参数LambdaDemo::add是静态方法的方法引用。

代码第9行中第一个实际参数d::sub是实例方法的方法引用,d是LambdaDemo实例。

注意,java Lambda表达式方法引用

以上的内容你都了解了吗?请多多的关注奇Q工具网吧,更多java入门知识,可以为你分享。

推荐阅读:

java Lambda表达式访问局部变量详细介绍

java Lambda表达式访问成员变量详细介绍

java Lambda表达式的使用,作为参数使用详解