Обобщения Java NullPointerException - PullRequest
       5

Обобщения Java NullPointerException

1 голос
/ 16 февраля 2012

Я хочу сделать универсальный стек, используя дженерики.

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)

Не могли бы вы объяснить мне, что я делаю не так? Если я совершил глупую ошибку, не обижайся на меня, я новичок, поэтому я мало что знаю.

Ответы [ 2 ]

7 голосов
/ 16 февраля 2012

Вы повторно объявляете stack в своем конструкторе, а не присваиваете внешнему stack:

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

Должно быть

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

, поэтому stacknull при использовании в push.

0 голосов
/ 16 февраля 2012

Просто используйте класс стека, который уже существует для Java.

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

Дополнительная документация здесь http://docs.oracle.com/javase/6/docs/api/java/util/Stack.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...