/** * 书本:《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到10 for(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 9
java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to [Ljava.lang.Integer;
at Lesson15_generices.GenericArray2.main(GenericArray2.java:55)
时间: 2024-10-26 22:19:52