java8 lambda 嵌套使用 样例 和 解析 3

6 为什么load(ia) 调用的 是 方法2  却不是 方法1?

在这里插入图片描述
如果 仔细看过问题 5 ,这个理解起来就容易多了。
ia 是对 FunctionIA接口 实现方法的引用,这个引用 就是 this::getFunctionIb, getFunctionIb 是对 FunctionIA 里 方法 testa 的实现 。
根据方法的 重载 特性, 会选择 方法2。

7 为什么 这条invokeDynamic指令 描述的 方法 testa 的参数里 会带 FunctionInterfaceTest?

在这里插入图片描述
图中划线的 是一条invokeDynamic指令,对应 java 代码 是 FunctionInterface.FunctionIA ia = this::getFunctionIb; 这条语句

这个问题可以拆解成几个小问题,
testa的参数 应该是 String 类型 ,这里却是 FunctionInterfaceTest类型
FunctionInterface.FunctionIA testa(FunctionInterfaceTest xx) ; 这个方法 怎么来的,有什么作用

因为没有找到 官方的材料,所以不能下 断论性的定义。只能推测:啥也没推出来. --!

不过 我们做了一个测试例子
在这里插入图片描述
在这里插入图片描述
我们 可以发现 同样 invokeDynamic 指令那行。有一个 Function apply(FunctionInterfaceTest xx) 方法。
推测一下:对于 “this::xxxx” 这样的 java 语句。jvm 会 像上边那样 生成一个 带 调用者(caller)参数的 方法。调用者(caller)就是 代码 所在的 类,也就是 “this::xxxx”所在的类,这里就是 FunctionInterfaceTest了。至于这个方法 是怎么来,有什么作用,还不清楚。

8 这个方法是怎么来的?

在这里插入图片描述
上图 对应的 java 代码 是
在这里插入图片描述
这个方法有个特点 是 getFunctionIb 返回的 是 函数式接口类型 FunctionIB。也就是说明 getFunctionIb 的返回值 是 一段方法, 这段方法 的类型 是 FunctionIB , 也可以说 FunctionIB 的testb 方法的其中一种实现 是 getFunctionIb 的返回值。而getFunctionIb 这方法 有符合 FunctionIA 类型,getFunctionIb 方法是 testa 方法的 一个实现。

9 这个方法怎么来的,为什么会用 两个String类型 参数? 

在这里插入图片描述
这个问题在 问题5 有解释。

到此 java8 lambda 嵌套使用 样例 和 解析 系列全部结束了。
其中 有对网上内容的引用,有自己代码实践,也有不少推测 和 留下的疑问 和 没有发现的错误,如果 哪位朋友 看到了,不要吝惜的指正一下。
或者有 相关权威性的资料 也不要吝啬哈。
至于对这些问题的总结就不写了,我相信每个人对问题的看法都不一样,总结也各有特色。
最后希望这篇文章能够对学习lambda的朋友 多少提供些帮助。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值