簡體   English   中英

類型中的方法不適用於參數

[英]The method in the type is not applicable for the arguments

我試圖制作紙牌游戲,但我遇到了一些小問題。 我正在嘗試從我的新列表卡中添加另一個類的卡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++;
}

元素類(在singlelinkedlist類中)

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;

我知道問題是我正在嘗試將一個元素插入到期望獲得卡片的方法中,但我只是想知道如何將它從泛型轉換為特定類型(卡片)或其他東西。 我一直在尋找一些關於泛型的好教程,但還沒找到能直接幫助我的東西。 因此,如果某人有關於直接解決我的問題的一些提示,或者有關於該主題的教程/描述的良好鏈接,我將非常感謝!

如果您需要更多信息,或者我需要改寫一些東西請告訴我:)

我認為你應該使用Card類型的currentCard變量而不是Element<Card>類型。

你需要從它所帶來的元素中提取卡片 currentCard.value應該做你想要的。

但也許你應該節省一些麻煩,而只是使用java.util.List

我不確定你為什么編寫自己的LinkedList。 也許這是家庭作業? 正如josaphatv建議的那樣,使用Java LinkedList會解決你實現LinkedList的問題。

主要問題就像josaphatv提到的那樣。 你應該傳入一張Card,它是currentCard.value而不是Element本身。 而且您不需要將E轉換為Card(盡管可以使用類型轉換(Card)值。

但是,正如我所看到的,你沒有調用任何特定的Card方法,也沒有在Card上進行任何TypeStrict操作。 所以真的,沒有必要將E轉換為Card。

現在,在設計和實施方面,這里有很多不好的做法,我只會記下2個基本的東西。

  • 在Element類中,通過將屬性設置為public來違反Encapsulation。 這意味着說任何其他類都可以修改其內容的屬性。 在OOP中,不建議這樣做。

  • 如上所述,為什么重新發明輪子,使用Java.util.List可以做得更好,嘗試在谷歌上搜索LinkedList java。

希望這可以幫助

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM