我的抽象类及其子类有问题。 ActionDeck
是Deck
的子类,其中包含ActionDeck
的无参数构造函数,但是每当我获得NullPointerException
的双端队列和数组列表实例变量时,我的超类就会拥有。它还在VScode中将其标记为未使用。我不确定我是否正确实施了它。我的代码有什么问题?
Deck.java
abstract class Deck<C> {
protected Deque<C> deck;
protected ArrayList<C> temp;
public Deck () {
Deque<C> deck = new ArrayDeque<>();
ArrayList<C> temp = new ArrayList<>();
}
ActionDeck.java
public class ActionDeck extends Deck<ActionCard> {
public ActionDeck() {
super();
}
因此,当我尝试在ActionDeck
的arraylist中添加某些内容时,它会显示一个错误:
Exception in thread "main" java.lang.NullPointerException: Cannot invoke "java.util.ArrayList.add(Object)" because "this.temp" is null
at ActionDeck.generateDeck(ActionDeck.java:26)
at Board.initializeData(Board.java:30)
at Main.main(Main.java:10)
将不胜感激,谢谢!
答案 0 :(得分:0)
Deck
构造函数并未初始化成员-而是声明了两个局部变量来隐藏成员并对其进行初始化。删除这些行上的类型声明,您将获得预期的行为:
public Deck () {
deck = new ArrayDeque<>();
temp = new ArrayList<>();
}