java method.isBridge
链接:https://www.zhihu.com/question/54895701/answer/141623158
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
public interface AInterface<T> {
void func(T t);
}
public class AClass implements AInterface<String> {
@Override
public void func(String s) {
System.out.println(s);
}
}
Java的泛型是要擦除的,虚拟机不认这个玩意儿,那么问题来了,AInterface中的func方法的参数在虚拟机中是什么?只能是Object了吧,还能是其他东西?
于是它其实是这样的
public interface AInterface {
void func(Object t);
}
问题又来了,AClass实现了AInterface接口,来看看现在的AClass是什么样的
public class AClass implements AInterface {
public void func(String s) {
System.out.println(s);
}
}
这根本就没有实现void func(Object)方法嘛,那是怎么解决的呢?编译器给生成了一个方法,喂给虚拟机时,AClass长下面这样
public class AClass implements AInterface {
public void func(String s) {
System.out.println(s);
}
public void func(Object s) {
this.func((String) s);
}
}
新生成的这个方法就是桥接方法。
我们可以看到这个方法
javap -p AClass.class

当然了,反射可以搞到这个方法
public static void main(String[] args) throws Exception {
AClass obj = new AClass();
Method func = AClass.class.getMethod("func", String.class);
func.invoke(obj, "AAA");
System.out.println(func.isBridge());
func = AClass.class.getMethod("func", Object.class);
func.invoke(obj, "BBB");
System.out.println(func.isBridge());
}


java method.isBridge的更多相关文章
- Java反射中method.isBridge() 桥接方法
桥接方法是 JDK 1.5 引入泛型后,为了使Java的泛型方法生成的字节码和 1.5 版本前的字节码相兼容,由编译器自动生成的方法.我们可以通过Method.isBridge()方法来判断一个方法是 ...
- Java Method Logging with AOP and Annotations
Sometimes, I want to log (through slf4j and log4j) every execution of a method, seeing what argument ...
- 测者的测试技术手册:揭开java method的一个秘密--巨型函数
揭开java method的一个秘密:巨型函数 相信,很多人都不知道Java的Method的上限为64K.本文将超过这个上限的函数叫做巨型函数. 巨型函数的问题 1.如果代码超过了这个限制,Java编 ...
- Calling a Java Method from Native Code
http://journals.ecs.soton.ac.uk/java/tutorial/native1.1/implementing/method.html Calling Java Method ...
- 测者的测试技术笔记:揭开java method的一个秘密--巨型函数
相信,很多人都不知道Java的Method的上限为64K.本文将超过这个上限的函数叫做巨型函数. 巨型函数的问题 1.如果代码超过了这个限制,Java编译器就报"Code too large ...
- Java Method Area
ref http://blog.csdn.net/huangfan322/article/details/53220169 https://docs.oracle.com/javase/specs/j ...
- java --Method
MethodDemo class MethodDemo { public static void main(String[] args) { //调用自定义的方法. draw(4,5); draw(8 ...
- 【java编程】java中什么是bridge method(桥接方法)
https://blog.csdn.net/mhmyqn/article/details/47342577 https://www.cnblogs.com/strinkbug/p/5019453.ht ...
- Java基础之Bridge method(桥接方法)
1.什么是桥接方法 桥接方法是 JDK 1.5 引入泛型后,为了使Java的泛型方法生成的字节码和 1.5 版本前的字节码相兼容,由编译器自动生成的方法. 判断方法 我们可以通过 Method.isB ...
随机推荐
- Addition Chains
题目描述: 一个与 n 有关的整数加成序列 < a0 , a1 , a2 ...am> 满足一下四个条件: 1.a0=1 2.am=n 3.a0<a1<a2<...< ...
- c代码,输出i,j,k互不相同的三位数
#include <stdio.h> int main() { int i,j,k; printf("\n"); for(i=1;i<5;i++){ for(j= ...
- Python day1_Base1笔记
1.helloworld print('helloword') 2.输入输出 a=input('Please input a value') print(a) 3.标识符 1.由字母数字下划线构成 2 ...
- 学习笔记52—coverletter
SCI 论文投稿时需要递送一封 Cover letter.你曾经有没有过这样的经历:刚提笔准备写第一句话就陷入沉思——称呼怎么写?或许有的作者认为直接写 Dear editors 就可以了,不用和老外 ...
- sessionId的生成机制
目录 面试问道这个我居然不知道怎么回答,当然也是因为我确实没有研究过.下面就是百度了一篇文章后简单回答这个问题. 参考:http://www.cnblogs.com/sharpxiajun/p/339 ...
- MarkerOpter marker操作类
构造函数:MarkerOpter=function(p_params): p_params={} 参数描述: p_params.layer; // markerlayer p_params.imgUr ...
- Lua和C++交互 学习记录之二:栈操作
主要内容转载自:子龙山人博客(强烈建议去子龙山人博客完全学习一遍) 部分内容查阅自:<Lua 5.3 参考手册>中文版 译者 云风 制作 Kavcc vs2013+lua-5.3.3 1 ...
- ACM-ICPC 2018 沈阳赛区网络预赛 J Ka Chang
Ka Chang 思路: dfs序+树状数组+分块 先dfs处理好每个节点的时间戳 对于每一层,如果这一层的节点数小于sqrt(n),那么直接按照时间戳在树状数组上更新 如果这一层节点个数大于sqrt ...
- VIM编辑器和VI编辑器的区别
vi 和vim 的区别 写在前面:这个两个"东西"着实让我烦恼一阵子,但是自己一直没当回事,但是遇到了好几次再决定彻底把他们搞的明白,一下是我通过查找资料了解到的关于这两个编辑器的 ...
- [mybatis-spring]sqlSessionFactoryBean
在mybatis中,SqlSessionFactory由SqlSessionFactoryBuilder创建. 在mybatis-spring中,是由SqlSessionFactoryBean创建的. ...