【问题标题】:Unused instance variables in abstract class [duplicate]抽象类中未使用的实例变量[重复]
【发布时间】:2020-09-20 04:53:48
【问题描述】:

我的抽象类及其子类有问题。 ActionDeckDeck 的子类,其中包含 ActionDeck 的无参数构造函数,但每当我为我的超类拥有的双端队列和数组列表实例变量获得 NullPointerException 时。它还在 VScode 中将其标记为 unused。我不确定我是否正确实施它。我的代码有什么问题?

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 的数组列表中添加一些内容时,它会吐出一个错误:

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)

我们将不胜感激,谢谢!

【问题讨论】:

  • 请包含generateDeck() 方法的代码,这是实际抛出异常的地方。

标签: java class oop abstract-class


【解决方案1】:

Deck 构造函数没有初始化成员 - 它声明了两个隐藏成员的局部变量并初始化它们。删除这些行上的类型声明,您将获得预期的行为:

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

【讨论】:

  • 哦,我完全错过了!非常感谢,它又可以工作了。
猜你喜欢
  • 2019-02-10
  • 2021-01-28
  • 1970-01-01
  • 1970-01-01
  • 2013-06-19
  • 1970-01-01
  • 2018-12-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多