日期:2014-05-20  浏览次数:20717 次

问一个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类型应该不错啊~~~~~


------解决方案--------------------
擦除是进入处理后的机制,是运行时的问题
编译器报错是为了强制你使用正确类型