当前位置: 首页 > 知识库问答 >
问题:

如何继承Kotlin中的MutableList?

冀弘济
2023-03-14

我正在尝试继承MutableList,并将我自己的函数添加到它中。例如:

class CompositeJob : MutableList<Job> {
    fun cancelAllJobs() {
        for (job in this) {
            job.cancel()
        }
    }
}

但我得到了以下错误:

类“CompositeJob”不是抽象的,也不实现抽象成员
在Kotlin.Collections.MutableList中定义的公共抽象值大小:Int

我如何继承MutableList,从而可以使用它的原始方法,如add()和isEmpty(),并添加我自己的方法?

多谢了。

共有1个答案

宰父衡
2023-03-14

mutableList是一个接口-它不实现它的任何方法,只是声明它们。如果您想从头实现mutableList,就必须实现它的所有20个方法加上size属性,错误已经告诉您了。

但是,您可以子类此接口的实际实现,例如arraylistlinkedlist:

class CompositeJob : ArrayList<Job>() {
    fun cancelAllJobs() {
        for (job in this) {
            job.cancel()
        }
    }
}

编辑:如果您只是希望对协同job实例进行分组,那么此时应该使用父jobsupervisorjobcoroutineScope,而不是像这样手动收集作业。

 类似资料:
  • 主要内容:构造函数,重写,属性重写Kotlin 中所有类都继承该 Any 类,它是所有类的超类,对于没有超类型声明的类是默认超类: Any 默认提供了三个函数: 注意:Any 不是 java.lang.Object。 如果一个类要被继承,可以使用 open 关键字进行修饰。 构造函数 子类有主构造函数 如果子类有主构造函数, 则基类必须在主构造函数中立即初始化。 输出结果: 子类没有主构造函数 如果子类没有主构造函数,则必须在每一

  • Kotlin 中所有类都继承该 Any 类,它是所有类的超类,对于没有超类型声明的类是默认超类: class Example // 从 Any 隐式继承 Any 默认提供了三个函数: equals() hashCode() toString() 注意:Any 不是 java.lang.Object。 如果一个类要被继承,可以使用 open 关键字进行修饰。 open class Ba

  • 问题内容: 我们有下课: 输出为: 超 子 问题: 什么礼物?是父级的对象,哪个孩子作为字段保留? 如果是这样,抽象类的继承如何工作?您不能创建抽象类的实例。 如果不是,重写方法在哪里保留? 我尝试使用Google,但发现的只是关于如何继承类的常见信息。 更新: 您仍在告诉我明显的事情。也许我的问题没有引起误解,但我将尝试改写一下: 当我们使用调用方法时,您说的是,我们正在访问父级的方法。但是,如

  • 问题内容: 在PHP / Java中,可以做到: 并且,Super类的所有公共/受保护的方法,属性,字段等都会自动成为Sub类的一部分,如有必要,可以重写这些类。 Javascript中的等效功能是什么? 问题答案: 我已经更改了现在的操作方式,我尝试避免使用构造函数和它们的属性,但是我从2010年起的旧答案仍然是最底层的。我现在更喜欢。适用于所有现代浏览器。 我应该注意,这通常比使用函数构造函数

  • 本文向大家介绍JavaScript中的继承之类继承,包括了JavaScript中的继承之类继承的使用技巧和注意事项,需要的朋友参考一下 继承简介       在JS中继承是一个非常复杂的话题,比其他任何面向对象语言中的继承都复杂得多。在大多数其他面向对象语言中,继承一个类只需使用一个关键字即可。在JS中想要达到继承公用成员的目的,需要采取一系列措施。JS属于原型式继承,得益于这种灵活性,我们既可以

  • 在Android应用程序中,我需要用一个抽象级别反序列化Kotlin数据类的Json数据。但我不知道如何在构造函数中放置正确的属性。 简单来说,假设我有一个形状: 有两个派生 和 所以我的目标是,不要实例化一个形状。所以,相反,总是反序列化它的派生。稍后,我需要处理其他类中的一些集合属性,如: 但我还必须知道每个元素的派生类型。 当我尝试用Gson反序列化给定的示例时 我总是有一个非法的辩论例外