【ThinkingInJava】37、关于泛型数组

/*** 书本:《Thinking In Java》* 功能:由于有了擦除,,数组运行的时候类型就只能是Object[]。如果我们立即将其转型为T[],那么在编译期该数组的实际类型就将会丢失,* 而编译器可能会错过某些潜在的错误检查。所以我们最好在集合内部使用Object[],然后当你使用数组元素的时,添加一个对T的转型。* 文件:GenericArray2.java* 时间:2015年4月19日09:38:19* 作者:cutter_point*/package Lesson15_generices;public class GenericArray2<T>{private Object[] array;//构造函数,创建一个一定长度的泛型数组public GenericArray2(int sz){array = new Object[sz];//创建的类型是Object类型的}//给数组指定的位置赋值public void put(int index, T item){array[index] = item;}//获取指定位置的值@SuppressWarnings("unchecked")public T get(int index){return (T)array[index];//一个一个地取,一个一个地转没问题,但是不能取出一个数组,应为java对数组的保存是Object类型的}//获取这个泛型数组@SuppressWarnings("unchecked")public T[] rep(){return (T[])array;}public static void main(String[] args){//创建一个10位的数组GenericArray2<Integer> gai = new GenericArray2<Integer>(10);//放入1到10for(int i = 0; i < 10; ++i)gai.put(i, i);for(int i = 0; i < 10; ++i)System.out.print(gai.get(i) + " ");System.out.println();//取出这个数组try{Integer ia[] = gai.rep();//调用这个函数的时候,这个还是尝试吧Object[]转化为T[],这个任然不正确} catch (Exception e){e.printStackTrace();}}}

输出:

0 1 2 3 4 5 6 7 8 9java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to [Ljava.lang.Integer;at Lesson15_generices.GenericArray2.main(GenericArray2.java:55)

天下爱情,大抵如斯。

【ThinkingInJava】37、关于泛型数组

相关文章:

你感兴趣的文章:

标签云: