微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决抽象类中未使用的实例变量

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

将不胜感激,谢谢!

解决方法

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。