Java 泛型 NullPointerException

发布于 2025-01-06 06:56:21 字数 1048 浏览 3 评论 0原文

我想使用泛型创建一个通用堆栈。

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)

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

I want to make an Universal stack using generics .

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

    }
}

Everything compiles succesfully . The problem comes when I call the following :

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

I get

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)

Could you explain me what am I doing wrong ? If I made a stupid mistake don't be harsh on me , I am a beginner so I don't really know much.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

痴意少年 2025-01-13 06:56:21

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

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

应该

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

因此在 中使用时 stack 为 null >推

You're re-declaring stack within your constructor rather than assigning to the outer stack:

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

Should be

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

therefore stack is null when used in push.

我恋#小黄人 2025-01-13 06:56:21

只需使用 Java 已有的堆栈类即可。

Stack<Integer> stack = new Stack<Integer>();

更多文档位于此处 http://docs.oracle.com /javase/6/docs/api/java/util/Stack.html

Just use the stack class that already exists for Java.

Stack<Integer> stack = new Stack<Integer>();

More documentation is here http://docs.oracle.com/javase/6/docs/api/java/util/Stack.html

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文