class GenericStack<E>
{
public final static int INITIAL_SIZE=16;
private E[] elements;
private int size;
public GenericStack()
{
this(INITIAL_SIZE);
}
public GenericStack(int initialCapacity)
{
elements =(E[])new Object[initialCapacity];
}
public E push(E value)
{
if(size>=elements.length)
{
E[] temp=(E[])new Object[elements.length*2];
System.arraycopy(elements,0,temp,0,elements.length);
elements=temp;
}
return elements[size++]=value;
}
public E pop()
{
return elements[size-1];
}
public boolean isEmpty()
{
return size==0;
}
public int getSize()
{
return size;
}
public static void main(String[] args)
{
GenericStack<String> stack1=new GenericStack<String>();
stack1.push("abc");
stack1.push("bcd");
GenericStack<Integer> stack2=new GenericStack<Integer>();
stack2.push(1);
stack2.push(2);

}
}
public class WildCardDemo1
{
public static void main(String[] args)
{
GenericStack<Integer> intStack=new GenericStack<Integer>();
intStack.push(1);
intStack.push(2);
intStack.push(-2);
System.out.print("The max number is "+max(intStack));
}
public static double max(GenericStack<? extends Number> stack)
{
double max=stack.pop().doubleValue();
while(!stack.isEmpty())
{
double value=stack.pop().doubleValue();
if(value>max)
max=value;
}
return max;
}
}WildCardDemo1.java:12: 警告: [unchecked] 未经检查的类型使用
找到: java.lang.Object[]
需要: E[]
                elements =(E[])new Object[initialCapacity];
                               ^
WildCardDemo1.java:18: 警告: [unchecked] 未经检查的类型使用
找到: java.lang.Object[]
需要: E[]
                        E[] temp=(E[])new Object[elements.length*2];
                                      ^
2 警告

解决方案 »

  1.   

    main函数中
    GenericStack<Integer> intStack=new GenericStack<Integer>();
    这句话不是已经泛型实例化了吗?怎么还是会unchecked呢?
      

  2.   

    GenericStack类中的main()函数是没用的,忘了删掉了,但不影响程序的运行。
      

  3.   

    因为Object[]能否转换为E[]在编译是无法确定的,只有等到运行时知道了E代表的具体类型之后才能确定。
      

  4.   

    你在把构造函数改为    public GenericStack(E e)
        {
            this(INITIAL_SIZE);
        }这样就可以了