/**
* 书本:《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)