所有示例代码打包下载 : 点击打开链接
Java8新特性 :
- 接口新增默认方法和静态方法
- Optional类
- Lambda表达式
- 方法引用
- Stream API - 函数式操作流元素集合
- Date/Time API
- 新API和工具
- Nashorn , JavaScript引擎
4 . 方法引用
方法引用的基本思想是 , 如果一个Lambda代表的只是"直接调用这个方法" , 那最好还是用名称来调用它 , 而不是去描述如何调用它 . 事实上 , 方法引用就是直接引用已有Java类或对象的方法或构造器 . 与Lambda联合使用 , 方法引用可以使语言的构造更紧凑简洁 , 减少亢余代码(方法引用类似于C语言中的函数指针)方法引用用法就是使用一对冒号:: , 目标引用放在分隔符::前 , 方法的名称放在后面 , 即ClassName :: methodName . 例如People :: getAge就是引用了People类中定义的方法getAge . 请记住 , 不需要括号 , 因为你没有实际调用这个方法 .
方法引用大致分为四类 :
构造器引用
语法是Class :: new . 这个构造器必须是无参构造
静态方法引用
语法是Class :: staticMethod 这个方法接收一个Class类型的参数
无参成员方法引用
语法是Class :: method 没有参数的方法
有参实例方法引用
语法是instance :: method 这个方法接收一个instance对应的Class类型的参数
代码Demo :
package com.xbz.java8.methodQuote;
import java.util.Collections;
import java.util.List;
/**
* @title 方法引用Demo
* @description
* @author Xingbz
* @createDate 2018/2/10
* @version 1.0
*/
public class MethodQuoteDemo {
public static void main(String[] args){
People p1 = People.create(People :: new);//构造器引用
List<People> list = Collections.singletonList(p1);
list.forEach(People :: print);//静态方法引用
list.forEach(People :: repair);//无参成员方法引用
list.forEach(p1 :: follow);//有参实例方法引用
}
}
输出结果 :
print : com.xbz.java8.methodQuote.People@682a0b20
repair : com.xbz.java8.methodQuote.People@682a0b20
follow : com.xbz.java8.methodQuote.People@682a0b20