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 ...
随机推荐
- Django2.2安装
Django2.2安装 https://media.djangoproject.com/releases/2.2/Django-2.2.tar.gz 解压 tar -zvxf Django-2.2.t ...
- loglog()函数
数据: xd = [1, 2, 3] yd = [0.6, 0.2, 0.2] matlab中双对数函数: 命令: loglog(xd, yd, 'blacko-', 'MarkerFaceColor ...
- [JS]计算字符串中出现最多的字符和其出现次数
这是一道面试题 此处是利用Obj来解决的,当然不只此一种方法. //思路:遍历数组,拿到一个字符,并将之以 "字符":出现次数 的key:value形式存到对象中. //如果此字符 ...
- Android AndFix修复方式的限制
这里阅览了很多网上关于修复的资料,一一贴在这里便于查看: https://github.com/alibaba/AndFix 这是官方处 要了解使用,一定得看看这里. http://www.jia ...
- python模块(3)
1.xml:实现不同语言或程序之间进行数据交换的协议 <data> <country name="Liechtenstein"> <rank upda ...
- 《剑指offer》第五十题(字符流中第一个只出现一次的字符)
// 面试题50(二):字符流中第一个只出现一次的字符 // 题目:请实现一个函数用来找出字符流中第一个只出现一次的字符.例如,当从 // 字符流中只读出前两个字符"go"时,第一 ...
- Linux实际常用命令
1.删除0字节文件 find -type f -size 0 -exec rm -rf {} \; 2.查看进程 按内存从大到小排列 ps -e -o “%C : %p : %z : %a”|sor ...
- <%@page contentType="text/html;charset=gbk"%> 与 <meta http-equiv="Content-Type" content="text/html; charset=GBK">区别
前一个是在服务端起作用,是告诉应用服务器采用何种编码输出JSP文件流, 后一个是在客户端起作用,是告诉浏览器是采用何种编码方式显示HTML页面
- English trip M1 - AC3 Teacher:Corrine
课堂上内容 16,black,games The clothes is Only $. is lucky number in China. God give us black eyes,but we ...
- JS实现继承的6种方式
使用pretotype,call实现完美继承 父类: fuction Animal(name){ this.name=name||"Animal"; this.sl ...