那我们要怎么做呢?有两种办法解决上面的错误,第一种是通过创建一个Object类型的数组,然后显示转换为E[]类型。见下面的代码:
import java.util.EmptyStackException;public class TestGenericArray { private E[]elements; private int size=0; private static final int DEFAULT_INITIAL_CAPACITY = 16; public TestGenericArray(){ elements=(E[])new Object[DEFAULT_INITIAL_CAPACITY]; } public E pop(){ if(size==0){ throw new EmptyStackException(); } E reslut=elements[--size]; elements[size]=null; return reslut; }}注意此时在 elements=(E[])new Object[DEFAULT_INITIAL_CAPACITY];这一行会有编译警告,提示我们这个Type safety: Unchecked cast from Object[] to E[],类型安全的警告,即没有检验从Object数组转化为E的类型安全性。这种做法虽然能够消除编译错误,但是有警告,也就是告诉我们这样不是类型安全的。如果这样做我们必须自己保证elements数组中的数据是类型安全的才可以这样做。当我们确认未受检的转换是类型安全的,那么我们要在最小的范围内禁止警告。