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
10年+大厂架构经验,资深技术专家,就职于阿里巴巴、淘宝、百度等一线互联网大厂。
关注「mikechen」公众号,获取更多技术干货!
后台回复【面试】即可获取《史上最全阿里Java面试题总结》,后台回复【架构】,即可获取《阿里架构师进阶专题全部合集》