在實(shí)現(xiàn)行為模式時(shí),用繼承和多態(tài)搞定是沒問題,可在嘗試使用泛型化的類來實(shí)現(xiàn)時(shí),遇到了一些問題,自己也去看了協(xié)變逆變相關(guān)的知識(shí),發(fā)現(xiàn)還是無法理解,特來向各位園友請(qǐng)求賜教,謝謝!想達(dá)成的效果是,定義一個(gè)泛型基類集合,然后添加此泛型基類派生出來的子類至集合中,并在循環(huán)中調(diào)用基類的方法??墒牵龅搅艘恍﹩栴},是泛型參數(shù)不支持繼承?Car<IBrand>或ICar<IBrand> 并不能接受子類Car<Bmw> 的賦值, 看上去好像不僅僅像是協(xié)變逆變方面的問題,或是我哪里理解有誤,不解中……
1 回答
隔江千里
TA貢獻(xiàn)1906條經(jīng)驗(yàn) 獲得超10個(gè)贊
逆變協(xié)變這個(gè)你換個(gè)思路來看
協(xié)變,從具體往抽象(從派生類往父類變動(dòng))
逆變,從抽象往具體(同上相反)
從關(guān)鍵字看
協(xié)變 out (直接可以看成返回)
逆變 in (直接可以看為入?yún)ⅲ?/p>
你寫的代碼的問題有兩個(gè)
1.這里是協(xié)變(out)
2.class級(jí)別是不支持逆變和協(xié)變的(隱式支持協(xié)變,但這個(gè)是另一個(gè)話題了),所以你這邊不可能直接從Car<T>中鼓搗出個(gè)類似于Cat<out T>的玩意出來,所以你第一行是沒辦法了
- 1 回答
- 0 關(guān)注
- 761 瀏覽
添加回答
舉報(bào)
0/150
提交
取消
