Kotlin:使用特定类型的子类创建ArrayList
我正在尝试创建一个包含抽象类的Kotlin:使用特定类型的子类创建ArrayList,kotlin,Kotlin,我正在尝试创建一个包含抽象类的ArrayList abstract class Data { abstract var data: ArrayList<Entry> abstract class Entry(open var name: String) } 但它一直告诉我,CategoryItem不是下一行的Entry的子类 override var data = ArrayList<CategoryItem>() override var data
ArrayList
abstract class Data {
abstract var data: ArrayList<Entry>
abstract class Entry(open var name: String)
}
但它一直告诉我,CategoryItem
不是下一行的Entry
的子类
override var data = ArrayList<CategoryItem>()
override var data=ArrayList()
据我所知,
CategoryItem
是一个条目
。我做错了什么?Kotlin中的ArrayList由其泛型参数保持不变。这意味着ArrayList
不是ArrayList
的子类型,即使CategoryItem扩展了条目
如果要用类别项列表
覆盖条目列表
,至少有两种方法:
数组列表
更改为不可变列表
(列表
在Kotlin中是协变的,因此列表
是列表
的子类型)数据
抽象变量声明为抽象变量数据:ArrayList
(称为使用站点协方差),但您将无法通过数据
属性在此列表中添加元素,只能获取它们抽象类数据
这是最简单的强制方式
该ArrayList必须只有Entry的子类
abstract class Entry(open var name: String)
class CategoryItem(override var name: String) : Entry(name)
abstract class Data<T:Entry> {
abstract var data: ArrayList<T>
}
class Category : Data<CategoryItem>() {
override var data: ArrayList<CategoryItem>
get() = TODO("not implemented") //To change initializer of created properties use File | Settings | File Templates.
set(value) {}
}
抽象类条目(打开变量名称:String)
类CategoryItem(重写变量名称:字符串):条目(名称)
抽象类数据{
抽象变量数据:ArrayList
}
类别:数据(){
覆盖变量数据:ArrayList
get()=TODO(“未实现”)//要更改已创建属性的初始值设定项,请使用文件|设置|文件模板。
设置(值){}
}
您是否尝试过退出条目?另外,尝试将其设置为var List
或val ArrayList
,但不能同时设置为两者。
abstract class Data<T:Entry>
abstract class Entry(open var name: String)
class CategoryItem(override var name: String) : Entry(name)
abstract class Data<T:Entry> {
abstract var data: ArrayList<T>
}
class Category : Data<CategoryItem>() {
override var data: ArrayList<CategoryItem>
get() = TODO("not implemented") //To change initializer of created properties use File | Settings | File Templates.
set(value) {}
}