Java泛型中的擦除与多态性是如何冲突的?

Setory 2010-10-19 10:14:25
程序如下(核心技术里的):
public class Pair<T> {
public Pair(){first = null;second = null;}
public Pair(T first,T second){
this.first = first;
this.second = second;

}
public T getFirst(){return first;}
public T getSecond(){return second;}

public void setFirst(T newValue){first = newValue;}
public void setSecond(T newValue){second = newValue;}

private T first;
private T second;


}

class DI extends Pair{
public void setSecond(Date second) {
}

}
不知擦除是如何影响了多态性?另外书中还讲了一个“桥方法”是什么意思?
...全文
187 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
luochengor 2011-11-11
  • 打赏
  • 举报
回复
用Class对象获取所有的Method:
Pair:
public void cn.luochengor.csdn.Pair.setSecond(java.lang.Object)
public java.lang.Object cn.luochengor.csdn.Pair.getSecond()
public void cn.luochengor.csdn.Pair.setFirst(java.lang.Object)
public static void cn.luochengor.csdn.Pair.main(java.lang.String[])
public java.lang.Object cn.luochengor.csdn.Pair.getFirst()
public native int java.lang.Object.hashCode()
public final native java.lang.Class java.lang.Object.getClass()
public final void java.lang.Object.wait(long,int) throws java.lang.InterruptedException
public final void java.lang.Object.wait() throws java.lang.InterruptedException
public final native void java.lang.Object.wait(long) throws java.lang.InterruptedException
public boolean java.lang.Object.equals(java.lang.Object)
public java.lang.String java.lang.Object.toString()
public final native void java.lang.Object.notify()
public final native void java.lang.Object.notifyAll()

DI:
public void cn.luochengor.csdn.DI.setSecond(java.util.Date)
public void cn.luochengor.csdn.Pair.setSecond(java.lang.Object)
public java.lang.Object cn.luochengor.csdn.Pair.getSecond()
public void cn.luochengor.csdn.Pair.setFirst(java.lang.Object)
public static void cn.luochengor.csdn.Pair.main(java.lang.String[])
public java.lang.Object cn.luochengor.csdn.Pair.getFirst()
public native int java.lang.Object.hashCode()
public final native java.lang.Class java.lang.Object.getClass()
public final void java.lang.Object.wait(long,int) throws java.lang.InterruptedException
public final void java.lang.Object.wait() throws java.lang.InterruptedException
public final native void java.lang.Object.wait(long) throws java.lang.InterruptedException
public boolean java.lang.Object.equals(java.lang.Object)
public java.lang.String java.lang.Object.toString()
public final native void java.lang.Object.notify()
public final native void java.lang.Object.notifyAll()
龙四 2011-11-10
  • 打赏
  • 举报
回复
用Class对象获取所有的Method也能看到,最新的反编译工具有可能看不到

[Quote=引用 2 楼 ticmy 的回复:]

反编译源码,就可以看到桥方法

setSecond(Object obj)
setFirst(Object obj)
[/Quote]
龙四 2011-11-10
  • 打赏
  • 举报
回复
反编译源码,就可以看到桥方法

setSecond(Object obj)
setFirst(Object obj)
huangzihao100 2011-11-10
  • 打赏
  • 举报
回复
UP
原来这问题已经是10年得啦..
其实后面写得很清楚..变量pair声明为Pair<Date> 而然Pair只有setSecond(Object)这个方法.. pair引用的对象调用的是setSecond(Object)这个方法\
本人第一次回答 请见谅

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧