java 方法调用表达式_java lambda怎么表达式判断被调用接口名称和接口中方法

本文介绍了如何通过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" );

}

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值