[英]Java - Are ArrayList and ArrayList<Object> two different classes?
[英]ArrayList of object of different (Inherited) classes with a generic parameter in Kotlin
注意:為了簡單起見,我刪除了 init 和特定函數等方法。
我有一個名為 Role 的抽象 class。
abstract class Role {}
從那個 class 我繼承了許多類,如騎士,巫師......等。
class Knight(context: Context) : Role() {}
class Srocerer(context: Context) : Role() {}
然后我創建了另一個抽象 Class 具有通用參數R:角色
abstract class Turn<R : Role> {}
不是每個角色(玩家)都能輪到
正如你所料,我還繼承了一些類,如 KngithTurn、SorcererTurn... 等。
class KnightTurn(role : Knight) : Turn<Knight>() {}
class SorcererTurn(role : Sorcerer) : Turn<Sorcerer>() {}
The problem is when I create an arrayList of Turn, and try to add an object of type KnightTurn or SorcererTurn, the IDE says that there is a type mismatch despite the fact that they are inherited from class Turn.
var list = ArrayList<Turn<Role>>()
val knight = KnightTurn(Knight(baseContext))
list.add(knight)
// Type mismatch
// Required:Turn<Role>
// Found:KnightTurn
在 java 中,我只是這樣解決問題:
ArrayList<Turn<Role?>>
如何在 Kotlin 中做到這一點,或者還有其他解決方案嗎? 先感謝您。
像這樣聲明您的列表表示只有具有完全Role
類型參數的Turn
可以添加到列表中。
var list = ArrayList<Turn<Role>>()
如果我理解正確,您希望能夠將Turn
與派生自Role
的任何內容一起添加。 這意味着您應該使用out
關鍵字:
var list = ArrayList<Turn<out Role>>()
在我進行更改后,此代碼編譯沒有錯誤:
val knight = KnightTurn(Knight())
list.add(knight)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.