上篇文章简单的介绍了Lamda表达式的语法以及使用方法,但是有些“老司机”的使用方式是不走寻常路的,有时候我们仍然看不懂他们的代码,如下:
这是什么写法呢?上面代码的解释就是:表示返回User对象一个新的实例,我们可以使用常规的表达式语法()->{return new User;};也可以使用上述极简模式。这个就是我们今天要讲的,在Lamda表达式中使用方法的引用。
且开始我们今天的博客主题---方法的引用!
什么是方法的引用呢?我们先看理论知识。
定义:方法引用是用来直接访问类或者实例的已经存在的方法或者构造方法,方法引用提供了一种引用而不执行方法的方式,如果抽象方法的实现恰好可以使用调用另外一个方法来实现,就有可能可以使用方法引用
先做个总结,方法的引用可以分为四种,分别是静态方法引用,实例方法引用,对象方法引用,以及构造方法引用。如下图所示。
下面我们就这四种方法的引用,用具体的实例来理解上述的知识点。
一、静态方法引用
如果函数式接口的实现恰好可以通过调用一个静态方法来实现,那么就可以使用静态方法引用。
二、实例方法引用
和静态方法类似,如果函数式接口的实现恰好可以通过调用一个实例的实例方法来实现,那么就可以使用实例方法引用
三、对象方法引用(难点)
抽象方法的第一个参数类型刚好是实例方法的类型,抽象方法剩余的参数恰好可以当做实例方法的参数。如果函数式接口的实现能由上面说的实例方法调用来实现的话,那么就可以使用对象方法引用。
上述定义我们至少可以得到三点基本的对象引用的要素:1第一个参数类型刚好是实例方法的类型 2抽象方法剩余的参数恰好可以当做实例方法的参数
我们就上述定义,看看到底什么时候可以使用对象引用:
解释都在注释中,例子比较牵强,但是很能说明当我们满足什么样的条件的时候可以使用对象参数。这里我提供自己的记忆方法
四:构造方法引用
如果函数式接口的实现恰好可以通过调用一个类的构造方法来实现,那么就可以使用构造方法引用。
构造方法引用和静态方法引用以及实例方法引用类似,较为简单。如下代码:
上述示例代码中,分别例举了无参数和有参数的构造方法引用例子,注意一下在使用有参数的构造方法时,函数式接口传入的参数恰好为构造方法需要的参数,且参数顺序一样。
后面我们会学习一下Stream API的使用,敬请期待。。。
网友评论