如何解决抽象类中未使用的实例变量
我的抽象类及其子类有问题。 ActionDeck
是Deck
的子类,其中包含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 举报,一经查实,本站将立刻删除。