美文网首页
Java反射桥接方法解析

Java反射桥接方法解析

作者: 谈谈理想_ttlx | 来源:发表于2019-10-17 09:52 被阅读0次

在阅读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方法就是判断是否是桥接的方法,也就是编译器自己生成的,而非开发者自定义的方法。

以上是一些个人理解,如果偏差,还请指正,我及时更改,以免误导他人。

本文由博客一文多发平台 OpenWrite 发布!

相关文章

  • Java反射桥接方法解析

    在阅读mybaits源码的反射模块时,看到了如下的一段代码: 为了避免对没看过这段源码的朋友造成干扰,所以我对代码...

  • Java高级知识

    反射 sczyh30 深入解析Java反射(1) - 基础深入解析Java反射(2) - invoke方法深入探究...

  • 3分钟快速搞懂Java的桥接方法

    什么是桥接方法? Java中的桥接方法(Bridge Method)是一种为了实现某些Java语言特性而由编译器自...

  • 3分钟快速搞懂Java的桥接方法

    什么是桥接方法?Java中的桥接方法(Bridge Method)是一种为了实现某些Java语言特性而由编译器自动...

  • Feign源码学习(2)

    ReflectiveFeign 从Feign的使用方法我们可以推测,它的内部实现是利用了Java反射解析Api方法...

  • java桥接模式实例解析

    上篇文章讲解了适配器模式相关知识与使用实例,本篇文章介绍桥接模式,这两种模式都属于结构型设计模式,经常在软件架构设...

  • java反射

    参考:深入解析Java反射(1) - 基础 获取class对象 判断是否某个类实例 创建实例 获取方法 getDe...

  • Android之反射机制与JSON解析

    1 反射机制&JSON解析 【 Java的高级特性:反射机制 publicclass Student { pu...

  • Java 反射

    Java反射Java反射API获取Class对象通过反射创建实例对象,调用公共方法通过反射调用私有方法 一.Jav...

  • Java Bridge Method

    1.java桥接方法 使用javap -c 查看class文件: 在TestBridgeMethod$Wareho...

网友评论

      本文标题:Java反射桥接方法解析

      本文链接:https://www.haomeiwen.com/subject/nwcmmctx.html