线程" main"中的例外情况将对象存储到数组时的java.lang.ArrayStoreException

时间:2017-03-19 06:43:16

标签: java arrays object

这是我的全部代码,问题要求我使用Array进行解决。

import java.lang.reflect.Array;

public class MyStack<T> {
    public MyStack (Class<T[]> _class,int size){
        final T[] values = (T[]) Array.newInstance(_class,size);
        this.values = values;
        this.size=size;
    }

    private T[] values;
    private int top=0,size;

    public void push(T nextElement){
        if(isFull()){
            System.out.println("full");
        }
        else {
            values[top++] = nextElement;
        }
    }

    public T pop(){
        if(isEmpty()) {
            System.out.println("empty");
            return null;
        }
        else {
            return values[top--];
        }
    }

    public boolean isEmpty(){
        if (top==0)return true;
        return false;
    }

    public boolean isFull(){
        if(top==size-1)return true;
        else return false;
    }

    public static void main(String args[]){
        MyStack<Integer> myStack = new MyStack<Integer>(Integer[].class,9);
        for (int i =0;i<10;i++)
        {
            myStack.push(i);
        }
        while(!myStack.isEmpty()){
            System.out.println(myStack.pop());
        }
    }
}

当我编译它时,它会在线程&#34; main&#34;中抛出异常。 java.lang.ArrayStoreException:values[top++] = nextElement;中的java.lang.Integer ,无论我在String,Integer或任何其他对象中使用哪种类型。 有没有办法解决这个问题?

1 个答案:

答案 0 :(得分:1)

您的构造函数需要Class<T[]>,但应该使用Class<T>,而values上也不需要变量阴影。我写的就像

public MyStack(Class<T> _class, int size) { 
    this.values = (T[]) Array.newInstance(_class, size);
    this.size = size;
}

if else你不需要isEmpty个链(只返回你正在测试的条件) - 比如

public boolean isEmpty() { 
    return top == 0;
}

isFull

public boolean isFull() {
    return top == size - 1;
}