问一个JAVA范型方面的问题
今天看《java核心编程》,说java的范型采用的是“擦除”机制,擦除后生成一个原始类,所有的范型类型都被替换为Object类型。
比如一个范型类
public class Pair <T>
{
public void setFirst(T newValue) { first = newValue; }
private T first;
private T second;
}
经过擦除后,会变成:
public class Pair
{
public void setFirst(Object newValue) { first = newValue; }
private Object first;
private Object second;
}
那么,对于setFirst方法而言,他需要的参数是一个Object类型的,可以是任何一个类型,很自由。
在使用该范型类时:
Pair <Integer> p = new Pair <Integer> ();
p.setFirst( "aaa "); //编译器会报错!!!!!
上述代码编译器为什么会报错啊???根据定义,setFirst方法接受的是Object类型,我赋给他一个String类型应该不错啊~~~~~
------解决方案--------------------擦除是进入处理后的机制,是运行时的问题
编译器报错是为了强制你使用正确类型