Java8 - 方法引用

3 篇文章 0 订阅

方法引用

lambda表达式一种简写的方式

*    lambda表达式:由接口申明和方法定义组成,
*    方法引用 方法的定义有符合接口定义的方法,不用重新定义方法。

方法引用基本使用方式:

  • Class::new:获取该实例对象;
  • Class::static_method:调用该class的静态方法;
  • Class::method:调用该class的任意方法;
  • instance::method:调用该实例的任意方法。

方法引用注意事项:

  • 该 引用的函数 必定与 定义的接口 形参 和 返回值 类型一致;
  • 调用静态方法 和 调用实例方法 时使用的 调用对象 是不一样的,一个是Class,一个是instance;
  • 方法引用 有许多 函数式接口 的引用。
    常用function: 具体详情可见 Java8-函数式编程
    • Function:接收一个输入参数,返回一个结果;
    • BiFunction:接收两个参数, 返回一个对象;
    • Consumer:接收一个输入参数,无返回操作;
    • Predicate:接收一个输入参数,返回一个布尔值结果;
    • Supplier:无参数,返回一个结果;

DEMO

public class FunctionRefer {
 public static void main(String args[]){
        Consumer<String> consumer = System.out::println;
        /*
         * 静态方法的引用或任意对象方法引用:Class::method
         */
        //lambda表达式执行的过程
        FunctionOperator functionOperator = (a,b) -> a*b;
        //实现走(a,b)->a*b的return a*b;
        consumer.accept("lambda 接口内部类实现 执行结果:"+functionOperator.sum(1,2));
        //函数引用过程,因为在Math中有个静态方法
        FunctionOperator functionOperator1 = Math::addExact;
        // 1+2 实现方法走addExact();
        consumer.accept("lambda 方法引用 执行结果:"+functionOperator1.sum(1,2));
        // 特定对象的引用
        FunctionRefer f=new FunctionRefer();
        f.objectRefer();
    }
    public void objectRefer(){
        Consumer<String> consumer = System.out::println;
        //Class::new:获取该实例对象
        Supplier<FunctionOperator> fun = FunctionReferImpl::new;
        FunctionOperator functionOperator = fun.get();
        consumer.accept("new 引用方式:"+functionOperator.sum(1,2));
        // 接口引用 instance::method:调用该实例的任意方法
        FunctionOperator functionOperator1 = functionOperator::sum;
        consumer.accept("方法 引用方式:"+functionOperator1.sum(1,2));
    }
}

/*
 *内部接口定义
 */
interface FunctionOperator{
    int sum(int a ,int b);
}

class FunctionReferImpl implements FunctionOperator{
    @Override
    public int sum(int a, int b) {
        return a+b;
    }
}

运行结果

lambda 接口内部类实现 执行结果:2
lambda 方法引用 执行结果:3
new 引用方式:3
方法 引用方式:3

方法引用暂时先写这么多,后面有学到再继续更新

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值