java lambda怎麼表達式判斷被調用接口名稱和接口中方法

1.首先可以用於lambda表達式的只能是interface,而且interface 中只有一個方法。

這就說明,只要找到接口類型就能肯定用的是哪一個方法。(以下:intTypeInterface、StringTypeInterface、paramInterface)java

2.判斷用的哪一個接口,經過調用的方法就能肯定(如:Test. invoke())

這裏有兩種狀況函數

#1.第一種
調用的方法名稱惟一,沒有重載(overload,方法同名,參數個數和類型不一樣)
這種狀況下直接能夠經過方法須要的參數類型便可判斷是哪一個接口
如示例中只有一個invoke 方法 void invoke(intTypeInterface a), 便可判斷用的是 intTypeInterface。
#1.第二種
調用的方法名稱不惟一,有重載(overload,方法同名,參數個數和類型不一樣)
這種狀況下須要經過invoke方法調用時,lambda表達式中的參數和返回值肯定用的是哪一個invoke方法。

好比:test.invoke( () -> 1 );
肯定參數爲空,返回值爲int類型
在intTypeInterface、StringTypeInterface、paramInterface中, intTypeInterface 中的test 方法知足條件
肯定調用的是invoke(intTypeInterface a)方法

示例

//下面定義兩個functional interface
interface intTypeInterface { int test(); }
interface StringTypeInterface { String test(); }
interface paramInterface { String test(String param); }

class Test {
    //兩個同名不一樣參數不一樣返回類型的函數
    //函數返回int類型的接口
    void invoke(intTypeInterface a) { System.out.println("intType"); }
    //函數返回String類型的接口
    void invoke(StringTypeInterface b)  { System.out.println("StringType");}
    //函數返回String類型,可是有兩個參數的接口
    void invoke(paramInterface b)  { System.out.println("param");}


    //***若是調用invoke函數會調用哪個?***//

    public static void main(String[] args) {
        Test test = new Test();

        //根據 1 返回類型得知應實例化intTypeInterface接口
        test.invoke( () -> 1 );
        //根據 "String" 返回類型得知應實例化StringTypeInterface接口
        test.invoke( () -> "String" );
        //根據函數參數得知應實例化paramInterface接口
        test.invoke( (String s) -> "String" );
}
相關文章
相關標籤/搜索