java - 位于 java 类文件中的 lambda 代码在哪里?
问题描述
我有这个java源文件:
import java.util.function.*;
public class t {
public static void main(String[] args) {
Function<Integer,Integer> r = (a) -> a*a+2*a+1;
System.out.println(r.apply(2));
}
}
我编译它,它按预期工作。这是 的输出javap -c -v t
,我在其中找不到 lambda 的位置。Integer
每当调用 lambda 时,告诉 jvm 用输入计算表达式的字节码在哪里?
解决方案
如果你想查看你的 lambda body 的代码a*a+2*a+1
,你应该调用javap -c -v -p t
查看私有方法:
private static java.lang.Integer lambda$main$0(java.lang.Integer);
descriptor: (Ljava/lang/Integer;)Ljava/lang/Integer;
flags: ACC_PRIVATE, ACC_STATIC, ACC_SYNTHETIC
Code:
stack=3, locals=1, args_size=1
0: aload_0
1: invokevirtual #7 // Method java/lang/Integer.intValue:()I
4: aload_0
5: invokevirtual #7 // Method java/lang/Integer.intValue:()I
8: imul
9: iconst_2
10: aload_0
11: invokevirtual #7 // Method java/lang/Integer.intValue:()I
14: imul
15: iadd
16: iconst_1
17: iadd
18: invokestatic #4 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
21: areturn
LineNumberTable:
line 4: 0
关于 lambda 内部实现的更详细答案在这里:Java lambda 函数将如何编译?
推荐阅读
- flutter - 颤振中的每日定期通知
- amazon-dynamodb - dynamodb 高效读取容量
- javascript - 获取nodejs中上传的图片url
- powershell - VS Code 中的默认输出文件存储在 UTF 16 LE 中,而默认设置为 UTF-8
- authentication - Jmeter:登录后我可以需要 100 个用户来检查仪表板吗
- c# - 如何在 Visual Studio 中将 .NET Framework 更改为 .NET Standard/Core?
- azure - Azure OMS 警报 - 将图表作为 OMS 警报的一部分发送到电子邮件
- reactjs - 在 bitbucket 上使用 testcafe 运行 e2e 测试
- javascript - 待办事项列表中的删除按钮 (HTML/JS)
- r - 数据整理:在不使用 R 中的 for 循环的情况下,从不同结构的 data.frame 创建时间序列数据的最佳方法