Java 8 方法引用(Method Reference)详解

概述

Java 8 引入了新特性lambda表达式。Lambda表达式是一种不隶属于任何类的匿名方法。其可以使用在函数接口(functional interface)定义的变量。函数接口是一种只包含一个抽象方法(abstract method),同时可以包含多个默认方法(default method)和静态方法(static method)的接口。因此,lambda表达式也可以看做另一种形式的匿名类。

方法引用是一个与Lambda表达式相关的重要特性。可以同lambda一样,将方法引用传递给函数接口。方法引用的形式如:

Object::methodName

双引号::用来表示引用一个方法。

方法引用分类

有四种类型的方法引用。具体如下

类型 方法引用语法 Lambda表达式语法
引用静态方法(Reference to a static method ) ClassName::staticMethodName (args) -> ClassName.staticMethodName(args)
对已存在对象的实例方法的引用(Reference to an instance method of an existing object) object::instanceMethodName (args) -> object.instanceMethodName(args)
引用特定类型的任意对象的实例方法(Reference to an instance method of an arbitrary object of a particular type) ClassName::instanceMethodName (arg0,rest) -> arg0.instanceMethodName(rest) Note: arg0 is of type ClassName
引用构造器(Reference to a constructor) ClassName::new (args) -> new ClassName(args)

其中,引用特定类型的任意对象的实例方法可能相对难以理解,下面本文将通过实例详细解读这四种方法引用类型。

引用静态方法

下述代码通过定义一个函数接口interface IntPredicate,该接口有一个抽象方法check()。check()方法接受一个类型为int参数,且返回值为类型boolean。IntPredicatesChecker类定义了两个静态方法。MethodRef类则有一个numCheck()方法,第一个参数为函数接口IntPredicate类型,第二个参数为int。 本实例通过numCheck的第一个参数分别接受lambda和静态方法引用来说明静态方法引用的使用。

public class MethodRef {
   
    public MethodRef() {
   
    }

    // 该方法将函数接口作为第一个参数
    public boolean numCheck(IntPredicate p, int n) {
   
        return p.check(n);
    }

    public static void main(String[] args) {
   
        MethodRef demo = new MethodRef();
        int num = 11;
        // 使用lambda 表达式检查number是否偶数
        IntPredicate lb1 = number -> (number % 2) == 0;
        boolean result = demo.numCheck(lb1, num);
        System.out.println("Using lambda expression: " + num + " is even: " + result);

        // IntPredicatesChecker 的isEven方法作为静态方法引用传递给numCheck()
        result = demo.numCheck(IntPredicatesChecker::isEven, num);
        System.out.println("Using static method reference: " + num + " is even: " + result);

        // 使用lambda表达式检查number是否为正数
        IntPredicate lb2 = number -> number > 0;
        result = demo.
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值