Java泛型NullPointerException

Teo*_*Teo 1 java generics nullpointerexception

我想使用泛型制作通用堆栈.

public class UniversalStack<E> implements StackInterface<E> {

    private E[] stack;
    private int dim;
    private int index;

    @SuppressWarnings("unused")
    public UniversalStack(int dim)
    {
        this.dim=dim;
        this.index=0;
        @SuppressWarnings("unchecked")
        E[] stack = (E[]) new Object[dim];


    }

    @Override
    public void push(E el) {
        // TODO Auto-generated method stub
        if(index+1<dim)
        {
            stack[index] = el;
            index=index+1;
        }

    }
}
Run Code Online (Sandbox Code Playgroud)

一切都成功编译.当我调用以下内容时会出现问题:

UniversalStack<Integer> integerStack = new UniversalStack<>(10);
integerStack.push(new Integer(1));
Run Code Online (Sandbox Code Playgroud)

我明白了

Exception in thread "main" java.lang.NullPointerException
    at com.java.lab4.UniversalStack.push(UniversalStack.java:41)
    at com.java.lab4.testStack.main(testStack.java:14)
Run Code Online (Sandbox Code Playgroud)

你能解释一下我做错了什么吗?如果我犯了一个愚蠢的错误,不要对我很苛刻,我是初学者,所以我真的不太懂.

Jam*_*gne 7

您在stack构造函数中重新声明而不是分配给外部stack:

E[] stack = (E[]) new Object[dim];
Run Code Online (Sandbox Code Playgroud)

应该

stack = (E[]) new Object[dim];
Run Code Online (Sandbox Code Playgroud)

因此stack在使用时为null push.

  • 我认为eclipse试图警告你,但你添加了抑制警告注释:-) (2认同)