【发布时间】:2013-10-12 21:57:49
【问题描述】:
我对桥接方法创建有一些疑问。我们可以将桥接技术应用于协变覆盖。现在考虑官方帮助中的示例:
public class Node<T>{
private T data;
public Node(T data){ this.data=data;}
public void setData(T data){
System.out.println("Node.setData");
this.data=data;
}
}
public class MyNode extends Node<Integer>{
public MyNode(Integer data){ super(data); }
public void setData(Integer data){
System.out.println("MyNode.setData");
this.data=data;
}
}
让桥接方法不创建。因此在运行时类MyNode 有两个方法:setData(Integer) 和setData(Object),其中last 继承自Node。当我们调用setData(new Inetegr(5)) 时将调用setData(Integer)。如果我们写Object o= new Integer(5); setData(o);,那么setData(Object) 将被调用。这不是真的。 那么两个问题:
- 我是否正确理解引入桥接法的原因?
- 建立桥接方法的必要和充分条件是什么?
【问题讨论】:
-
您好——阅读这里的答案,您可能会受益匪浅:stackoverflow.com/questions/5007357/java-generics-bridge-method