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

时间:2020-09-20 04:53:48

标签: java class oop abstract-class

我的抽象类及其子类有问题。 ActionDeckDeck的子类,其中包含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)

将不胜感激,谢谢!

1 个答案:

答案 0 :(得分:0)

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

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