黑马程序员技术交流社区

标题: 泛型小知识点 [打印本页]

作者: chen010yu    时间: 2014-8-1 18:06
标题: 泛型小知识点
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)方法,达到代码中多态的效果。
作者: bbdeyouxang    时间: 2014-8-2 23:55
好帖!!!
作者: 贾浩田    时间: 2014-8-5 10:08
看了分析后,都快忘了泛型了,亚历山大啊




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2