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


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

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

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" );
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM