Java ASM visitMethod中access值4161的含义及隐式方法疑问
关于ASM检测到的access值4161的含义
先将4161拆解为ASM方法访问标志的组合:
- 4161 = 4096(
ACC_SYNTHETIC) + 64(ACC_BRIDGE) + 1(ACC_PUBLIC)
对应的每个标志具体含义:
ACC_PUBLIC:该方法为公共访问权限ACC_BRIDGE:这是JVM生成的桥接方法,用于解决泛型类型擦除或协变返回类型的兼容性问题。结合你的场景,因为SomeModel是Entity的实现类,SomeModelQueryRepo中显式声明了返回SomeModel的get方法,编译器会自动生成一个返回Entity的桥接方法——JVM本身不直接支持协变返回类型,仅识别字节码层面的方法参数+返回类型完整签名,桥接方法就是用来填补这个语法与字节码规则的差异。ACC_SYNTHETIC:该方法是编译器自动生成的合成方法,并非代码中显式声明的,也就是你所说的“隐藏”方法。
这类桥接方法是Java编译器的常规操作,目的是在保留代码语法层面的协变返回特性同时,保证字节码能被JVM正确识别执行,无需手动处理。
内容的提问来源于stack exchange,提问作者Vivere
相关产品推荐
相关产品推荐

