Java 泛型 NullPointerException

标签 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;
        }

    }
}

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

UniversalStack<Integer> integerStack = new UniversalStack<>(10);
integerStack.push(new Integer(1));

我明白了

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)

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

最佳答案

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

E[] stack = (E[]) new Object[dim];

应该是

stack = (E[]) new Object[dim];

因此 stackpush 中使用时为 null。

关于Java 泛型 NullPointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9316127/

相关文章:

java - 从文件中读取并将第一个整数存储为字符串,其余的存储为整数

JAVA:如何使用 JMenuItem 和 Jbutton 上的监听器来计算费率

java - 从通配符列表中删除每个第 N 个元素 - Java

java - Java 中的通用链表克隆

java.lang.NullPointerException : Attempt to invoke virtual method 'void android.widget.ImageView.setImageResource(int)' on a null object reference 异常

java - Java方法签名后奇怪的 "[]"

java - 可调整大小的 Swing 布局,其中按钮根据可变尺寸排列

c# - 在 WCF 契约(Contract)中为泛型类型添加 AutoMapper 类型映射约定

android - 从图库中选择视频时,Android 10 像素 2 中出现无效的列纬度错误

java - 使用 JavascriptExecutor 检查页面源时出现空指针异常