抽象类中未使用的实例变量



我的抽象类及其子类出现问题。ActionDeckDeck的一个子类,它包含ActionDeck的无参数构造函数,但每当我为deque和数组列表实例变量获得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)

非常感谢您的帮助,谢谢!

Deck构造函数并没有初始化成员,而是声明了两个隐藏成员的局部变量并对其进行初始化。删除这些行上的类型声明,您将得到您期望的行为:

public Deck () {
deck = new ArrayDeque<>();
temp = new ArrayList<>();  
}

最新更新