【发布时间】:2014-06-26 17:07:21
【问题描述】:
我正在尝试制作纸牌游戏,但我遇到了一些小问题。我正在尝试在我的新列表卡片中添加来自另一个类的卡片 currentCard。我收到错误 SingleLinkedList 类型中的方法 addLast(Card) 不适用于参数 (DoubleLinkedList.Element)。
public class CardList<E extends Comparable<? super E>> extends SingleLinkedList<E> {
private SingleLinkedList<Card> cards;
private int cardRow;
public CardList(int cardRow) {
this.cardRow = cardRow;
cards = new SingleLinkedList<Card>();
cards.addLast(CardDeck.currentCard); // here is the error
}
}
我在 SingleLinkedList 中的 addLast 方法:
public class SingleLinkedList<E> {
protected transient Element<E> head;
protected transient int size;
public SingleLinkedList() {
head = null;
size = 0;
}
public void addLast(E value) {
Element<E> temp = new Element<E>(value, null);
if (head != null) {
Element<E> finger = head;
while(finger.next != null) {
finger = finger.next;
}
finger.next = temp;
} else {
head = temp;
}
size++;
}
元素类(在单链表类中)
protected static class Element<E> {
public E value;
public Element<E> next;
public Element(E value, Element<E> next) {
this.value = value;
this.next = next;
}
}
以及 DoubleLinkedList 类中的 currentCard 变量
public class CardDeck<E extends Comparable<? super E>> extends DoubleLinkedList<E> {
private DoubleLinkedList<Card> cards;
static Element<Card> currentCard;
我知道问题是我试图将一个元素插入到一个期望获得卡片的方法中,但我只是不知道如何将它从泛型转换为特定类型(卡片)或其他东西。我一直在寻找一些关于泛型的好教程,但还没有找到直接帮助我的东西。因此,如果有人有一些关于直接解决我的问题的提示,或者有关于该主题的教程/描述的良好链接,我将非常感激!
如果您需要更多信息,或者我需要重新措辞,请告诉我:)
【问题讨论】:
-
我认为这很简单。您的
currentCard是Element<Card>类型。根据变量名,我希望它是Card类型,如果是这样,那么您将不会看到该错误。 -
我记得我年轻的时候过度使用继承......你应该只为这种东西使用内置列表并将它与你的对象一起包装,而不是从你自己的自定义列表继承。
-
@Bhesh 我也在尝试,但后来我遇到了更多关于 card.next 等操作的问题,我想我必须在没有 E 部分或其他东西的情况下重做列表中的所有内容。希望有一种更简单的方法可以将 Element
转换为 card 或其他东西 -
@josaphatv 我希望我可以只使用内置列表等,但部分交易是我们必须使用我们自己的列表实现,但是所有这些泛型的东西让我头疼:P
-
你有什么理由扩展和委托给相同的列表类型?
标签: java generics linked-list