A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© chen010yu 中级黑马   /  2014-8-1 18:06  /  1242 人查看  /  2 人回复  /   1 人收藏 转载请遵从CC协议 禁止商业使用本文

Java泛型转换的本质:
1、虚拟机中没有泛型,只有普通的类和方法;
2、所有的类型参数都用它们的限定类型转换;
3、桥方法被合成来保持多态;
4、为保持类型安全性,必要时插入强制类型转换。

桥方法:前提DateInterval extends Pair
DateInterval interval = new DateInterval(……);
Pair<Date> pair = interval;
pair.setInfo(value);
这里,希望对setInfo的调用具有多态性,并调用最适合的方法;由于父类引用指向子类对象,所以应该调用
DateInterval.setInfo方法,但是类型擦除与多态发生冲突,此时编译器就在DateInterval类中生成一个桥方法;
public void setInfo(Object value)
{
  setInfo((Date)value);
}
以上语句的工作过程:
pair.setInfo(value)
变量pair已经声明为类型Pair<Date>,并且这个类型中有一个简单的方法叫setInfo,即setInfo(Object obj)。虚拟机用pair引用的对象调用这个方法,这个对象是DateInterval类型,因而将会动态绑定地调用
Dateinterval.setInfo(Object obj)方法,这个方法是合成的桥方法,它调用
DateInterval.setInfo(Date d)方法,达到代码中多态的效果。

2 个回复

倒序浏览
好帖!!!
回复 使用道具 举报
看了分析后,都快忘了泛型了,亚历山大啊
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马