(以下內容全部來自上述課程)
1.1 含義
把已經有的方法拿過來用,當作函數式接口中抽象方法的方法體。
已經有的方法:可以是Java自己寫的,也可以是第三方的。
示例語句:
::是方法引用符。
//用類名調用已有的方法
Arrays.sort(arr,FunctionDemo1::substraction);
注意點:
- 引用處必須是函數式接口---->選中使用的方法ctril+B–選中里面的形參顯示@FunctionalInterface√
- 被引用的方法必須已經存在
- 被引用方法的形參和返回值需要跟抽象方法保持一致
- 被引用方法的功能要滿足當前需求
1.2 引用靜態方法
**格式:**類名::靜態方法
范例:Integer::parseInt
list.stream().map(Integer::parseInt).forEach(s->System.out.print(s));
1.3 引用成員方法
格式:對象::成員方法
- 其他類:其他類對象::方法名
- 本類:this::方法名(靜態方法無this,需要重新創建對象引用)
- 父類:super::方法名(引用處不能是靜態方法,上同)
1.4 引用構造方法
格式:類名::new
范例:Student::new
不需要管返回值,只用保持形參就行。
1.5 類名引用成員方法
格式:類名::成員方法
范例:String::substring
方法引用規則(此方法獨有):
- 需要有函數式接口
- 被引用的方法必須已經存在
- 被引用方法的形參,需要跟抽象方法的第二個形參到最后一個形參保持一致,返回值需要保持一致
- 被引用方法的功能需要滿足當前的需求
抽象方法形參的詳解:
- 第一個參數:表示被引用方法的調用者,決定了可以引用哪些類中的方法。 ---->類名
在Stream流當中,第一個參數一般表示流里面的每一個數據。
假設流里面的數據是字符串,那么使用這種方式進行方法引用,只能引用String這個類中的方法。
就是:拿著流里面的每一個數據,去調用String類中的XXX方法,方法的返回值就是轉換后的結果。 - 第二個參數到最后一個參數:跟被引用方法的形參保持一致,如果沒有第二個參數,說明被引用的方法需要是無參的成員方法。
局限性:
- 不能引用所有類中的成員方法。
- 是跟抽象方法的第一個參數有關,這個參數是什么類型的,那么就只能引用這個類中的方法。
1.6 引用數組的構造方法
格式:數據類型[]::new
范例:int[]::new
細節:
數組的類型,需要和流中數據的類型保持一致。