第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

通用 setter 方法不兼容的類型錯誤

通用 setter 方法不兼容的類型錯誤

一只萌萌小番薯 2021-11-11 14:13:35
我是泛型的新手,我正在嘗試使用泛型類 SinglyLinkedNode 實現(xiàn)鏈表。但是,當我運行 setData() 和 setNext() 方法時,出現(xiàn)以下錯誤:.\singlyLinkedList\SinglyLinkedNode.java:13: error: incompatible types: T#1 cannot be converted to T#2this.data = d;            ^where T#1,T#2 are type-variables:  T#1 extends Object declared in method <T#1>setData(T#1)  T#2 extends Object declared in class SinglyLinkedNode.\singlyLinkedList\SinglyLinkedNode.java:21: error: incompatible types: SinglyLinkedNode<T#1> cannot be converted to SinglyLinkedNode<T#2>this.next = n;            ^where T#1,T#2 are type-variables:  T#1 extends Object declared in method <T#1>setNext(SinglyLinkedNode<T#1>)  T#2 extends Object declared in class SinglyLinkedNode在我看來,拋出錯誤是因為存在一種潛在的場景,其中預先存在的 this.data 或 this.next 的類型與 d 或 n 不匹配。我怎樣才能解決這個問題?有什么方法可以用 T#2(新數(shù)據(jù))覆蓋 T#1(預先存在的數(shù)據(jù))的類型?這是帶有我的構(gòu)造函數(shù)和 setter 方法的類:public class SinglyLinkedNode<T> {  private T data;  private SinglyLinkedNode<T> next;  SinglyLinkedNode(T d) {    this.data = d;    this.next = null;  }  public <T> void setData(T d) {    this.data = d;  }  //...  public <T> void setNext(SinglyLinkedNode<T> n) {    this.next = n;  }  //...}我很感激你能提供的任何幫助。提前致謝!編輯:感謝您的幫助!我已經(jīng)從我的方法中刪除了,但是當我從我的 SinglyLinkedList 類運行 setNext() 時我仍然收到以下錯誤:.\singlyLinkedList\SinglyLinkedList.java:63: error: method setNext in class SinglyLinkedNode<T#2> cannot be applied to given types;    curr.setNext() = toBeRemoved.getNext();        ^  required: SinglyLinkedNode<T#1>  found: no arguments  reason: actual and formal argument lists differ in length  where T#1,T#2 are type-variables:    T#1 extends Object declared in class SinglyLinkedList    T#2 extends Object declared in class SinglyLinkedNode.\singlyLinkedList\SinglyLinkedList.java:79: error: method setNext in class SinglyLinkedNode<T#2> cannot be applied to given types;    prev.setNext() = this.head;        ^所以在看來,getNext()(來自 SinglyLinkedNode)和 head(來自 SinglyLinkedList)沒有返回任何值,即使它們都應該返回 SinglyLinkedNode 對象。
查看完整描述

2 回答

?
侃侃爾雅

TA貢獻1801條經(jīng)驗 獲得超16個贊

你面臨的問題其實很簡單?;旧?,您需要了解泛型方法完全獨立于泛型類。


public <T> void setData(T d) {

this.data = d;

}


public <T> void setNext(SinglyLinkedNode<T> n) {

    this.next = n;

}

當您<T>在方法的修飾符中放置 a 時,您將使其成為通用方法。你的泛型方法中的類型 T 是不同的,并且覆蓋了整個類的類型 T,這意味著你可以輸入任何類型的對象,該方法將使用它作為其局部 T 值,這可以與全局完全不同類型 T。


<T>從您的方法修飾符中刪除將使它們成為常規(guī)的 setter 方法并默認為類類型 T,它保證與所需的類型匹配。


查看完整回答
反對 回復 2021-11-11
?
陪伴而非守候

TA貢獻1757條經(jīng)驗 獲得超8個贊

您不需要在 setter 上使用泛型,因為它將處理與類正在處理的相同類型的數(shù)據(jù)。所以,你的代碼會是這樣的:


public class SinglyLinkedNode<T> {

    private T data;

    private SinglyLinkedNode<T> next;


    SinglyLinkedNode(T d) {

        this.data = d;

        this.next = null;

    }


    public void setData(T d) {

        this.data = d;

    }


    //...


    public void setNext(SinglyLinkedNode<T> n) {

        this.next = n;

    }


    //...


}

所以現(xiàn)在您可以創(chuàng)建 SinglyLinkedNode 的實例并將值設置為:


public static void main(String[] args) {

    SinglyLinkedNode<Integer> integers = new SinglyLinkedNode<>(2);

    // 

}

另外,我會擺脫 setter,因為我已經(jīng)有一個構(gòu)造函數(shù)來設置值。


查看完整回答
反對 回復 2021-11-11
  • 2 回答
  • 0 關注
  • 242 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網(wǎng)微信公眾號