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

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

java:強(qiáng)相關(guān)的類對(duì)

java:強(qiáng)相關(guān)的類對(duì)

達(dá)令說 2023-05-24 15:57:14
我有一對(duì)彼此相關(guān)的課程:Msg1 <-> Data1Msg2 <-> Data2...所有“DataX”都擴(kuò)展了超類“Data”,“MsgX”擴(kuò)展了類“Msg”。這些超類目前(已簡化):abstract class Data< MSG extends Msg<? extends Data<MSG>>> {       MSG msg;       void modify( MSG msg ) {           this.msg = msg;       };   }和:abstract class Msg< DATA extends Data<? extends Msg<DATA>>> {    abstract DATA createData();    void modifyData( DATA data ) {        data.modify( this );    };  }但是,這兩個(gè)類 Data 和 Msg 的編譯失敗,語句“data.modify(this);”出現(xiàn)以下錯(cuò)誤:Msg.java:5: error: method modify in class Data<MSG> cannot be applied to given types;            data.modify( this );                ^  required: CAP#1  found: Msg<DATA>  reason: argument mismatch; Msg<DATA> cannot be converted to CAP#1  where DATA,MSG are type-variables:    DATA extends Data<? extends Msg<DATA>> declared in class Msg    MSG extends Msg<? extends Data<MSG>> declared in class Data  where CAP#1 is a fresh type-variable:    CAP#1 extends Msg<DATA> from capture of ? extends Msg<DATA>1 error有什么建議嗎?我已經(jīng)嘗試了十分之一的變體,添加和刪除“?”,“擴(kuò)展”,......但他們都以某種方式失敗了。
查看完整描述

1 回答

?
慕雪6442864

TA貢獻(xiàn)1812條經(jīng)驗(yàn) 獲得超5個(gè)贊

Java 有時(shí)就是這樣???;旧夏枰龅氖嵌x一個(gè)具體的類型參數(shù),它引用回被聲明的類,而不是使用通配符。我的意思是,而不是


abstract class Data<M extends Msg<? extends Data<M>>> {}

abstract class Msg<D extends Data<? extends Msg<D>>> {}

聲明為


abstract class Data<D extends Data<D, M>, M extends Msg<M, D>>

abstract class Msg<M extends Msg<M, D>, D extends Data<D, M>>

準(zhǔn)確地說,像這樣定義基類


abstract class Data<D extends Data<D, M>, M extends Msg<M, D>> {

       M msg;

       void modify( M msg ) {

           this.msg = msg;

       };

}


abstract class Msg<M extends Msg<M, D>, D extends Data<D, M>> {

    abstract D createData();


    void modifyData( D data ) {

        data.modify( (M) this ); // <- you still need to cast `this` though

    };  

}

然后你可以像這樣聲明子類:


class FooData extends Data<FooData, FooMsg> {

}


class FooMsg extends Msg<FooMsg, FooData> {

    @Override FooData createData() {

        return new FooData();

    }

}


查看完整回答
反對(duì) 回復(fù) 2023-05-24
  • 1 回答
  • 0 關(guān)注
  • 147 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)