Kotlin:使用特定类型的子类创建ArrayList

扫视

我正在尝试创建一个ArrayList包含抽象类的

abstract class Data {
    abstract var data: ArrayList<Entry>
    abstract class Entry(open var name: String)
}

我想强迫ArrayList它只具有Entry

class Category : Data() {
    override var data = ArrayList<CategoryItem>()
    class CategoryItem(
        override var name: String
    ):Entry(name)
}

但是它不断告诉我,CategoryItem它不是Entry下一行的子类

override var data = ArrayList<CategoryItem>() 

据我所知CategoryItem是一个Entry我究竟做错了什么?

ard石

ArrayList在Kotlin中,其通用参数不变这意味着,即使CategoryItem扩展了Entry,它也不ArrayList<CategoryItem>是的子类型ArrayList<Entry>

如果要Entry使用的列表覆盖的列表CategoryItem,则至少有两种方法:

  1. 您可以将可变更ArrayList改为不可变ListList在Kotlin中是协变的,因此List<CategoryItem>是的子类型List<Entry>

  2. 您可以将data抽象变量声明abstract var data: ArrayList<out Entry>(称为use-site covariance),但是您将无法通过data属性在此列表中添加元素,而只能获取它们。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在不进行类型转换的情况下访问父类型的arraylist中的特定子类型方法,仅在运行时才知道创建子类型

如何在Kotlin中使用返回带有类型参数的子类型的方法创建类?

Kotlin使用子类型覆盖乐趣

扩展类型以创建子类型

使用 ef core 使用 Table-per-Type (TPT) 方法创建子类型的子类型

如何使用与帖子类型名称不同的存档段创建自定义帖子类型

是否使用该特定子类型(Java)参数化了子类型“继承”通用接口?

创建Arraylist作为接受Kotlin中任何类型的函数的参数

使用LINQ获取特定子类型的列表条目

动态创建的子类的类型注释

使用 RestSharp 创建特定的请求类型

用子类的类型或其父类的类型创建子类对象

使用“类”数据类型时,如何指定类型,以便仅接受特定类的子类?

无法在 RealmObject 子类中创建 ArrayList

创建ArrayList的不可变子类

Kotlin高阶函数参数:传递子类型

Kotlin有什么不是Any的子类型

在Kotlin中检查ArrayList的类型

使用子类分配Kotlin var

如何将ArrayList转换为ArrayList的子类型

Coq:使用子类型卡住

覆盖使用子类型的方法

如何创建子类,以便参数在Java中属于子类类型

创建未知类型子类的新实例

Android Kotlin:如何使用泛型创建继承类型的实例?

如何使用 ACF 为自定义帖子类型创建自定义端点?

使用ACF更新/创建自定义帖子类型后,在Wordpress中调用函数

如何创建与嵌套类型参数的子类一起使用的扩展方法?

Flutter:使用泛型创建小部件时出现子类型错误