bridge method :
这个方法存在的意义?或者这个方法用来解决什么问题呢?
解决泛型遇到多态,jvm使用桥方法解决。
举例,泛型遇到多态。
如下面的两段代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
|
1 2 3 |
|
由于类型擦除的原因,DateInterval存在两个setSecond方法,分别为:
public void setSecond(Date second) //自身创建
public void setSecond(Object second) //继承自Pair<Date>
考虑以下调用:
DateInterval interval = new DateInterval(...);
Pair<Date> pair = interval;
pair.setSecond(aDate);
出现问题:由于多态性,pair理论上应该调用DateInterval.setSecond方法。但是根据上面的分析,DateInterval类存在两个setSecond方法,到底该如何调用呢?
jvm遇到 :
DateInterval interval = new DateInterval(...);
Pair<Date> pair = interval;
1. 正常思维是jvm最终调用 setSecond(Date) 这个方法,也就是 DateInterval 的方法。
2 实际上,jvm 会用 pair 引用的对象去调用这个setSecond(Object)方法。那 DateInterval 的方法呢?
3. jvm通过 pair 的方法再间接调用 DateInterval 的方法(这就是jvm对泛型遇到多态的核心处理方式)
4. pair的方法相当于 “桥梁的作用 ”,它的内容就是调用 DateInterval 的方法
public void setSecond(Object second) { setSecond((Date) second); }
这个方法叫做 桥方法。
另外呢,jvm可以通过返回类型 来区分多态方法。