打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
java 8新特性3——方法引用

方法引用

方法引用让你可以重复使用现有的方法定义,并像Lambda一样传递它们。在一些情况下, 比起使用Lambda表达式,它们更易读,感觉也更自然。

方法引用可以被看作仅仅调用特定方法的Lambda的一种快捷写法。

它的基本思想是,如果一个Lambda代表的只是“直接调用这个方法”,那最好还是用名称来调用它,而不是去描述如何调用它。

事实上,方法引用就是让你根据已有的方法实现来创建Lambda表达式。

当你需要使用方法引用时,目标引用放在分隔符::前,方法的名称放在后面。

例如,Apple::getWeight就是引用了Apple类中定义的方法getWeight。请记住,不需要括号,因为你没有实际调用这个方法。方法引用就是Lambda表达式(Apple a) -> a.getWeight()的快捷写法。

如何创建方法引用

方法引用主要有三类。

(1) 指向静态方法的方法引用(例如Integer的parseInt方法,写作Integer::parseInt)。

(2) 指向任意类型实例方法的方法引用(例如String的length方法,写作 String::length)。

(3) 指向现有对象的实例方法的方法引用(假设你有一个局部变量expensiveTransaction 用于存放Transaction类型的对象,它有个实例方法getValue,那么你就可以写expensive- Transaction::getValue)。

类似于String::length的第二种方法引用的思想就是你在引用一个对象的方法,而这个对象本身是Lambda的一个参数。

例如,Lambda 表达式(String s) -> s.toUppeCase()可以写作String::toUpperCase。

但第三种方法引用 指的是,你在Lambda中调用一个已经存在的外部对象中的方法。

例如,Lambda表达式

()->expensiveTransaction.getValue()

可以写作

expensiveTransaction::getValue。

构造函数引用

对于一个现有构造函数,你可以利用它的名称和关键字new来创建它的一个引用: ClassName::new。它的功能与指向静态方法的引用类似。例如,假设有一个构造函数没有参数。 它适合Supplier的签名() -> Apple。你可以这样做:

Supplier c1 = Apple::new;Apple a1 = c1.get();

这就等价于:

Supplier c1 = () -> new Apple();

从支持传递函数式代码,到lambda,到方法引用,我们看到Java8有了非常多的函数式编程的影子,这极大地提升了Java语言的灵活性,让代码极致简洁,结合流式api,我们会看到Java的编程风格已经越来越陌生,如果我们不能顺应技术的发展,及时跟进,真的会淹没在技术的潮流中!

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
Java 8简明教程
Java8 Lambda表达式教程
jdk8系列一、jdk新特性
Java 8 Lambda 表达式学习心得总结
【读书笔记】《写给大忙人看的Java SE 8》
怒学Java8系列一:Lambda表达式
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服