package practice;
class Node<T> {
T data;
public Node(T data) { this.data = data; }
public void setData(T data) {
System.out.println("Node.setData");
this.data = data;
}
}
class MyNode extends Node<Integer> {
public MyNode(Integer data) { super(data); }
@Override
public void setData(Integer data) {
System.out.println("MyNode.setData");
super.setData(data);
}
}
public class Practice {
public static void main(String[] s)
{
MyNode mn = new MyNode(5);
Node n = mn; // A raw type - compiler throws an unchecked warning
n.setData("Hello"); // Causes a ClassCastException to be thrown.
Integer x = mn.data;
}
}为什么此代码在n.setData("Hello");抛出异常,而实际上它应该在Integer x = mn.data;抛出异常
http://docs.oracle.com/javase/tutorial/java/generics/bridgeMethods.html
发布于 2012-09-09 18:22:27
您已经通过调用以下方法为Node定义了类型T
MyNode mn = new MyNode(5);即Integer类型。通过调用n.setData("Hello");,您正在尝试为Integer字段传入字符串变量。Node n仅仅是Integer类型的Node mn的一个引用。
https://stackoverflow.com/questions/12338232
复制相似问题