Java8 Method Reference

说明

Method Reference,即方法引用,是Java8为Lambda提供的简写语法。

方法引用是与Lambda 表达式等价的一种结构,只是更为简约。


举几个方法引用的例子:

1
2
3
4
5
6
7
8
9
10

Integer::parseInt //静态方法引用

System.out::print //实例方法引用

Person::new //构造器引用

super::toString //引用某个对象的父类方法

String[]::new //引用一个数组的构造器

分类

总体来说,方法引用总结分为4类:

引用静态方法

  • 语法:ContainingClass::staticMethodName

  • 例子: String::valueOf

  • 对应的Lambda:(s) -> String.valueOf(s)

  • 说明:与静态方法调用相比,只是把.换为::

引用特定对象的实例方法

  • 语法:containingObject::instanceMethodName

  • 例子: x::toString

  • 对应的Lambda:() -> this.toString()

  • 说明:与引用静态方法相比,都换为实例的而已

引用特定类型的任意对象的实例方法

  • 语法:ContainingType::methodName

  • 例子: String::toString

  • 对应的Lambda:(s) -> s.toString()

  • 说明:实例方法要通过对象来调用,方法引用对应Lambda,Lambda的第一个参数会成为调用实例方法的对象

引用构造函数

  • 语法:ClassName::new

  • 例子: String::new

  • 对应的Lambda:() -> new String()

  • 说明:构造函数本质上是静态方法,只是方法名字比较特殊

代码示例

静态方法引用的代码示例

1
2
3
4
5
6
7
8
9
Integer[] arr1 = { 1, 3, 5, 0, 7, 1 };

//按照大小排列:下面两种表达是等效的
//Lambda表达式
//Arrays.sort(arr1, (a1, a2) -> a1.compareTo(a2));
//方法引用(MethodReference)
Arrays.sort(arr1, Integer::compareTo);

Arrays.asList(arr1).forEach(item->System.out.print(item+","));

执行结果如下:

1
0,1,1,3,5,7,
ijiangtao wechat
欢迎订阅我的微信公众号
打赏支持博主继续写出好作品
0%