Java反射桥接方法解析
2019-10-17 09:08:26来源:博客园 阅读 ()
Java反射桥接方法解析
在阅读mybaits源码的反射模块时,看到了如下的一段代码:
/**
* 添加 Method 数组到 uniqueMethods
* @param uniqueMethods
* @param methods
*/
private void addUniqueMethods(Map<String, Method> uniqueMethods, Method[] methods) {
for (Method currentMethod : methods) {
//忽略 bridge 方法
if (!currentMethod.isBridge()) {
//获得方法签名
String signature = getSignature(currentMethod);
// check to see if the method is already known
// if it is known, then an extended class must have
// overridden a method
//uniqueMethods 不包含此方法签名时,进行添加
if (!uniqueMethods.containsKey(signature)) {
//添加
uniqueMethods.put(signature, currentMethod);
}
}
}
}
为了避免对没看过这段源码的朋友造成干扰,所以我对代码加了一些注释,这里点名感谢一下 芋道源码
大佬,艿艿这个狼人是真滴强,推荐大家关注,一起读源码,一起秃头。
回到正题,我比较疑惑的是 currentMethod.isBridge()
的 isBridge
是干嘛的,那么打开看一下。
public boolean isBridge() {
return (getModifiers() & Modifier.BRIDGE) != 0;
}
@Override
public int getModifiers() {
return modifiers;
}
java.lang.reflect.Modifier#BRIDGE 的值是 0x00000040
知乎上一位大佬给出了一个详细答案, https://www.zhihu.com/question/54895701 ,就是说因为泛型的原因,所以编译器在编译过程中会对泛型方法自动生成不存在类型的方法。结合mybatis的这段源码来看,也就是在反射过程中,移除那些编译器生成的方法,因为反射是基于字节码操作的,所以这一步是必要的。
isBridge方法就是判断是否是桥接的方法,也就是编译器自己生成的,而非开发者自定义的方法。
以上是一些个人理解,如果偏差,还请指正,我及时更改,以免误导他人。
原文链接:https://www.cnblogs.com/ttlx/p/11690162.html
如有疑问请与原作者联系
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- 国外程序员整理的Java资源大全(全部是干货) 2020-06-12
- 2020年深圳中国平安各部门Java中级面试真题合集(附答案) 2020-06-11
- 2020年java就业前景 2020-06-11
- 04.Java基础语法 2020-06-11
- Java--反射(框架设计的灵魂)案例 2020-06-11
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash