Java 8新特性學習之一:Java 8 lambda表示式初步第六回
在這次,我們來說Java8中關於lambda表示式的最一個部分方法引用,我認為主法引用的好處。就是可以引用類中定義的方法,使其實現引數化進行傳遞。
方法引用分類:靜態方法引用、例項方法引用、泛型方法引用和建構函式引用等。下面我們來具體說一下。
一、靜態方法引用
看標題就知道,用函式式介面引用定義在類中的靜態方法一般的形式如下:
類名::靜態方法名
與之對應的函式式介面,還是一樣的要求。就是在引數類、引數數量、丟擲的異常和返回的型別,都要與類中定義的靜態方法保持一致。
下面是一個例子:
interface Abc{
public int getVal(int val1);
}
class Modify2{
public static int getModify(int val1);
}
public class Modify1{
public static int getModify1(Abc abc,int val1){
return abc.getVal(val1);
}
public static void main(String[] args){
System.out.println(getModify1(Modify2::getModify,10));
}
}
例子的輸出結果為100。
二、例項方法引用
例項方法引用分類兩種情況:
1.以類宣告的變數引用類的例項方法,例項變數::例項方法名。
2.以類名稱引用類的例項變數,類名稱::例項方法名。
以上兩種情況的區別在於,第二種情況與之匹配的函式式介面中方法的定義形式比較特殊。以下是例子。
例1:
interface Abc{
public int QiuHe(int val1,int val2);
}
class Modify4_1{
public int SLqiuhe(int val1,int val2){
return val1+val2;
}
}
public class Modify4 {
public static int JTqiuhe(Abc abc,int val1,int val2){
return abc.QiuHe(val1, val2);
}
public static void main(String[] args) {
// TODO Auto-generated method stub
Modify4_1 m4_1 = new Modify4_1();
System.out.println(JTqiuhe(m4_1::SLqiuhe,10,10));
}
}
執行結果為:20。
例2:
interface Abc1{
public int QiuHe(Modify6 m6_1,int val1,int val2);
}
class Modify6{
private int index = 0;
public Modify6(int index){
this.index=index;
}
public int SLqiuhe(int val1,int val2){
return val1+val2+this.index;
}
}
public class Modify5 {
public static int ReturnSum(Abc1 abc,int val1,int val2,Modify6 m6_1){
return abc.QiuHe(m6_1,val1,val2);
}
public static void main(String[] args){
Modify6 m6_1 = new Modify6(200);
System.out.print(Modify5.ReturnSum(Modify6::SLqiuhe,10,10,m6_1));
}
}
執行結果為:220。
另外一點,通過使用super,可以引用方法的超類版本,如下所示:
super::name
方法的名稱由name指定。
三、泛型方法引用
泛型方法引用分為:泛型類中的方法引用和非泛型類中的泛型方法引用。
泛型類中的方法引用例子如下:
相關文章
- Java 8新特性學習之一:Java 8 lambda表示式初步第一回Java
- java 8新特性學習之五:Java 8 lambda表示式初步第五回Java
- java 8新特性學習之四:Java 8 lambda表示式初步第四回Java
- java 8新特性學習之三:Java 8 lambda表示式初步第三回Java
- java 8新特性學習之二:Java 8 lambda表示式初步第二回Java
- Java 8新特性(一):Lambda表示式Java
- Java8新特性(1):Lambda表示式Java
- Java8新特性(一)-Lambda表示式Java
- java8 新特性之Lambda 表示式Java
- Java8 新特性之 Lambda 表示式Java
- java8特性-lambda表示式Java
- java8新特性之lambda表示式(一)Java
- Java 8 流特性和 Lambda 表示式Java
- Java8新特性第1章(Lambda表示式)Java
- [轉]Java 8 的 lambda 表示式 Java 8 的 lambda 表示式Java
- java8學習:lambda表示式(2)Java
- java8學習:lambda表示式(1)Java
- Java8新特性——從Lambda表示式到Stream流Java
- Java 8新特性:lambda表示式(四)轉載總結Java
- Java 8 Lambda 表示式Java
- java 8 lambda表示式Java
- Java 8 Lambda 表示式學習心得總結Java
- java8的新特性之lambda表示式和方法引用Java
- Java8新特性 - LambdaJava
- Java8-Lambda表示式Java
- java8 lambda表示式Java
- 掌握 Java 8 Lambda 表示式Java
- Java8新特性系列-LambdaJava
- Java8新特性系列(Lambda)Java
- Java8 新語法習慣 (級聯 lambda 表示式)Java
- Java8的Lambda表示式Java
- Java 8 中的 lambda 表示式Java
- 深入探索 Java 8 Lambda 表示式Java
- 深圳Java培訓學習:Java8.0新特性之Lambda表示式Java
- 好程式設計師分享java8新特性之Lambda表示式程式設計師Java
- 【java8新特性】蘭姆達表示式Java
- Java8特性詳解 lambda表示式(一):使用篇Java
- java8新特性學習Java