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" );
}
相关文章
相关标签/搜索