java 8新特性3--方法引用

 

PS:向公众号发送关键字可以搜索文章哦!方法引用方法引用让你可以重复使用现有的方法定义,并像Lambda一样...



PS:向公众号发送关键字可以搜索文章哦!

方法引用



方法引用让你可以重复使用现有的方法定义,并像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.[b]getValue[/b]()
可以写作

expensiveTransaction::getValue。

构造函数引用

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

Supplier c1 = Apple::new;Apple a1 = c1.get();
这就等价于:

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

@不迷失|知识改善生活

微信公众号:java技术



专注技术研究与视频教学,分享有价值的技术与经验,关注程序员的发展!

技术博客:不迷失admin-manage:基于springboot的通用后台管理系统

不迷失博客V1.0正式发布了

Java软件工程师培训系列课程--Java入门第一课

Java软件工程师培训系列课程--Java入门第二课

Java软件工程师培训系列课程--Java入门第三课

Java软件工程师培训系列课程--Java入门第四课

Java软件工程师培训系列课程--Java入门第五课

Java软件工程师培训系列课程--Java入门第六课

Java软件工程师培训系列课程--Java入门第七课

Java软件工程师培训系列课程--Java入门第八课

Java软件工程师培训系列课程--Java入门第九课

Java软件工程师培训系列课程--Java入门第十课

Java软件工程师培训系列课程--Java入门第十一课

Java软件工程师培训系列课程--Java入门第十二课

Java软件工程师培训系列课程--Java入门第十三课

Java软件工程师培训系列课程--Java入门第十四课

Java软件工程师培训系列课程--Java入门第十五课

Java软件工程师培训系列课程--Java入门第十六课

Java自学系列课程17--接口


    关注 Java技术


微信扫一扫关注公众号

0 个评论

要回复文章请先登录注册