У меня есть этот конструктор:Почему я получаю исключение NullPointerException при проверке на ненулевые значения?
public class SentinelT<T> extends NodeT<T> {
//constructs an empty Sentinel linked to no other Nodes
public SentinelT() {
super(null, null, null);
this.prev = this;
this.next = this;
}
...
}
Поэтому, когда я пытаюсь изменить значение this.prev или this.next, или я пытаюсь использовать логические операторы этих значений, я получаю NullPointerException. Например:
public boolean isEmpty() {
return this.prev == this && this.next == this;
}
создает исключение NullPointerException. У меня такое чувство, что я просто ничего не понимаю о супер конструкторах или нулевых значениях ... Спасибо за любую помощь.
* Edit: добавлена NODET конструктор, собирается добавить экземпляра, генерирующий исключение
//NodeT class for a doubly linked list of T
public class NodeT<T> {
T data;
NodeT<T> prev;
NodeT<T> next;
//constructs a Node object
public NodeT(T data, NodeT<T> prev, NodeT<T> next) {
this.data = data;
this.prev = prev;
this.next = next;
}
* edit2: другой класс, предположим, что stringHeader является полем класса, что это происходит в SentinelT stringHeader = новый SentinelT();
public void testIsEmpty(Tester t) {
initData();
t.checkExpect(stringHeader.isEmpty(), true);
}
только что реализованный мой метод isEmpty() слишком сложный .. упростил его, чтобы «вернуть this.prev == this && this.next == this;» очевидно, это не изменяет ошибку, хотя –
Как выглядит конструктор NodeT? И можете ли вы опубликовать фактический вызов, который выдает (например, небольшую функцию 'main' или что-то еще)? – jacobm
Stacktrace показывает номер строки вашего NPE. Покажите нам эту строку (и, возможно, некоторый контекст). – jlordo