方法引用

一、方法引用概述

  1.方法引用是lambda表達式一種簡寫的方式,回憶lambda表達式,它由接口申明和方法定義組成,而在方法引用中方法的定義已然讓有符合接口定義的方法代替,不用重新定義方法。

  2.方法引用有四種基本方式:①Class::new:獲取該實例對象;

                 ②Class::static_method:調用該class的靜態方法;

                 ③Class::method:調用該class的任意方法;

                 ④instance::method:調用該實例的任意方法。

二、基本功能使用

 

 1 public class FunctionRefer {
 2     /*
 3      *內部接口定義 
 4      */
 5     interface FunctionOperator{
 6         int sum(int a ,int b);
 7     }
 8     
 9     /*
10      * 靜態方法的引用或任意對象方法引用:Class::method
11      */
12     @Test
13     public void add(){
14         //lumbda表達式執行的過程
15         FunctionOperator functionOperator = (a,b)->a+b;
16         Consumer<String> consumer = System.out::println;
17         consumer.accept("lumbda執行結果:"+functionOperator.sum(1,2));
18         //函數引用過程,因爲在Math中有個靜態方法
19         FunctionOperator functionOperator1 = Math::addExact;
20         consumer.accept("lumbda執行結果:"+functionOperator1.sum(1,2));
21     }
22 
23     class FunctionReferImpl implements FunctionOperator{
24         @Override
25         public int sum(int a, int b) {
26             return a+b;
27         }
28     }
29 
30     /**
31      * 特定對象的引用
32      */
33     @Test
34     public void objectRefer(){
35         //supplier是jdk1.8的函數,這個函數定義是有一個返回值,無入參,與創建實例對象的構造函數方法定義相同可以接收
36         Supplier<FunctionOperator> fun = FunctionReferImpl::new;
37         FunctionOperator functionOperator = fun.get();
38         FunctionOperator functionOperator1 = functionOperator::sum;
39         Consumer<String> consumer = System.out::println;
40         consumer.accept("方法引用方式:"+functionOperator1.sum(1,2));
41     }
42 }

 

 

 

三、總結

1.在方法引用上面注意點:

 ①該引用的函數必定與定義的接口形參和返回值類型一致;

 ②調用靜態方法和調用實例方法時使用的調用對象是不一樣的,一個是Class,一個是instance;

 ③其實在方法引用上面還有許多函數式接口的引用(可以參考java.util.function)。

 ④常用function:Function:接受一個輸入參數,返回一個結果;BiFunction:接受兩個參數返回一個對象;Consumer:接受一個輸入參數並且無返回操作,accept;Predicate:接受一個輸入參數,返回一個布爾值結果

    Supplier:無參數,返回一個結果。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章