java世界的变化有点大,java8以后你们都在写lambdas表达式,感受方法引用也是为了支持这一特色吧(固然也看到一些人人说没什么用)。java
看到这么一段代码,是否是很清晰地解释了了不一样写法的区别。函数
能够看到使用双冒号(::)将实例引用或类名与方法分开。对象
Iterable接口的foreash方法传入Consumer做为参数,Consumer能够做为lambdas表达式或者方法引用实现。接口
//使用labdas表达式 Stream.of(3,5,3,2,6,5,7,3,22,12).forEach(x->System.out.print(x)); System.out.println("---------------------------------"); //使用方法引用 Stream.of(3,5,3,2,6,5,7,3,22,12) .forEach(System.out::print); System.out.println("---------------------------------"); //将方法引用赋值给函数式接口 Consumer<Integer> printer = System.out::print; Stream.of(3,5,3,2,6,5,7,3,22,12) .forEach(printer); System.out.println("---------------------------------");
大神说方法引用比起lambda表达式,1.代码更短,2.包含类名和方法名,更容易阅读和理解。get
方法引用主要有如下方式:
1.引用静态方法
Class::staticMethod
例子: String::valueOfio
2.引用特定对象的实例方法
object::instanceMethod
例子: x::toStringjava8
3.引用特定类型的任意对象的实例方法
Class::methodName
例子: String::toStringstream
这种方法看着很神奇,实际上是脱离不了上下文的,它将用做方法的目标而非参数。lambda
4.引用构造函数
ClassName::new object
names.stream() .map(name -> new Person(name)) .collect(Collectors.toList());
看到一个知乎话题“lambda表达式和方法引用有没有本质区别”