考虑官方帮助中的示例:
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;
}
}
public class MyClass{
public static void main(String[] args){
Node n = new MyNode(5);
n.setData(new Object());//ok
}
}
是什么意思
Node n= new MyNode(5);
?Node n
是对原始类型的引用,但我将其描述Node<T>
为泛型类。原始类型是否是所有Node
通用类型的超类型?如果我们定义对原始类型的引用,那么泛型类型编译器在哪里不对类型进行检查,而是在哪里开始类型擦除?编译器默认匹配的语句是错误的,因为它不是.Node<T>
T
Node n
Node<T>
Node<T>
T
Object
Node<Object>
Node<Integer>
编译器的类型参数是什么
T
?Node<T>
编译器是否T
只考虑作为引用类型,但他不知道关于 的描述T
?