
Java方法引用简介
Java8 引入了方法引用特性,Java方法引用使用一对冒号 “::”,用来直接访问类或者实例的已经存在的方法或者构造方法。
比如:System.out::println 就是方法引用,表示调用 System.out 的 println 方法。
简单来说,方法引用本身就是一个 Lambda 表达式,它是一种更加简洁、易读的 Lambda 表达式,通过双冒号 :: 来引用目标方法。
Java方法引用作用
- 使用它可以简化 Lambda 表达式;
- Java方法引用可以使语言的构造更紧凑简洁;
- Java方法引用可以减少冗余代码;
Java方法引用分类
方法引用有如下几4种分类,如下图所示:

下面我们在 DataInfo 类中定义了 4 个方法,作为例子来区分 Java 中 4 种不同方法的引用。
如下所示:
class DataInfo{
private String name;
private String info;
private String welcome;
public static DataInfo create( Supplier<DataInfo> supplier) {
return supplier.get();
}
public static void getDataInfo( DataInfo dataInfo) {
System.out.println("DataInfo : " + dataInfo.toString());
}
public void getWebNameinfo( DataInfo dataInfo) {
System.out.println(" WebName " + dataInfo.getName());
}
public void getWelcomeInfo() {
System.out.println("welcome " + this.toString());
}
}
1.静态方法引用
静态方法引用:它的语法是
类名::静态方法名
示例如下:
dataInfoList.forEach(DataInfo::getDataInfo);
2.实例方法引用
实例方法引用:它的语法是
实例::实例方法名
示例如下:
dataInfoList.forEach( DataInfo.create( DataInfo::new )::getWebNameinfo );
3.对象方法引用
对象方法引用:它的语法是
类名::对象方法名
示例如下:
dataInfoList.forEach(DataInfo::getWelcomeInfo);
4.构建方法引用
构建方法引用:它的语法是
类名::new
示例如下:
DataInfo dataInfo = DataInfo.create(DataInfo::new);
Java方法引用示例
import java.util.List;
import java.util.ArrayList;
public class Java8Tester {
public static void main(String args[]){
List<String> names = new ArrayList();
names.add("taobao");
names.add("mikechen");
names.add("baidu");
names.forEach(System.out::println);
}
}
运行结果为:
taobao mikechen baidu
关于mikechen
mikechen睿哥,10年+大厂架构经验,资深技术专家,就职于阿里巴巴、淘宝、百度等一线互联网大厂。