我的抽象类及其子类出现问题。ActionDeck
是Deck
的一个子类,它包含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<>();
}