Java8新特性4--方法引用
2018-01-04 11:00
288 查看
方法引用
lambda方法引用让你可以重复使用现有的方法定义,并像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<Apple> c1 = Apple::new; Apple a1 = c1.get();这就等价于:
Supplier<Apple> c1 = () -> new Apple(); Apple a1 = c1.get();从支持传递函数式代码,到lambda,到方法引用,我们看到Java8有了非常多的函数式编程的影子,这极大地提升了Java语言的灵活性,让代码极致简洁,结合流式api,我们会看到Java的编程风格已经越来越陌生,如果我们不能顺应技术的发展,及时跟进,真的会淹没在技术的潮流中!
作者:不迷失
链接:https://www.jianshu.com/p/b4e1140c3d96
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
相关文章推荐
- Java 8新特性:新语法方法引用和Lambda表达式及全新的Stream API
- 方法的引用-java8新特性
- 详解Java8特性之方法引用
- 小司机带你用Java8新特性之方法引用
- JAVA8新特性[第三季]-方法引用与构造器引用
- Java 8新特性方法引用详细介绍
- Java8 新特性之三---------方法引用
- Java8新特性之三方法引用
- Java8新特性 -- Lambda 方法引用和构造器引用
- javaSE_8系列博客——Java语言的特性(三)--类和对象(20)--嵌套类(Lambda 表达式--VS--方法引用)
- Java 8新特性 Lambda、方法引用以及Stream
- Java8新特性——方法和构造函数引用
- Java8新特性方法引用、构造器引用、数组引用
- JAVA8新特性——方法引用
- Android 使用Java8新特性之"方法引用"
- JAVA8新特性(三)——方法引用
- Java笔记——Java8特性之Lambda、方法引用和Streams
- JAVA8新特性——方法引用
- Java 8新特性:新语法方法引用和Lambda表达式及全新的Stream API
- java8新特性之函数式接口、lambda表达式、接口的默认方法、方法和构造函数的引用