java方法引用(Method References)

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表達式和方法引用有沒有本質區別

相關文章
相關標籤/搜索