首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

问一个JAVA范型方面的有关问题

2011-12-21 
问一个JAVA范型方面的问题今天看《java核心编程》,说java的范型采用的是“擦除”机制,擦除后生成一个原始类,所

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


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

热点排行