我正在尝试继承 MutableList,并向其中添加我自己的函数。例如:
class CompositeJob : MutableList<Job> {
fun cancelAllJobs() {
for (job in this) {
job.cancel()
}
}
}
Run Code Online (Sandbox Code Playgroud)
但我收到以下错误:
类“CompositeJob”不是抽象的,也没有实现抽象成员
public abstract val size: Int 在 kotlin.collections.MutableList 中定义
我如何继承 MutableList,以便我可以使用它的原始方法,如 add() 和 isEmpty(),并添加我自己的方法?
谢谢。
MutableList是一个接口——它不实现它的任何方法,只是声明它们。如果你想MutableList从头开始实现,你必须实现它的所有 20 个方法和size属性,正如你的错误已经告诉你的那样。
但是,您可以子类化此接口的实际实现,例如ArrayList或LinkedList:
class CompositeJob : ArrayList<Job>() {
fun cancelAllJobs() {
for (job in this) {
job.cancel()
}
}
}
Run Code Online (Sandbox Code Playgroud)
编辑:如果您只是想对协程Job实例进行分组,则此时应该使用 parent Job、 aSupervisorJob和CoroutineScope,而不是手动收集这样的作业。
其他答案没有提到的一种选择是委托:
class CompositeJob : MutableList<Job> by mutableListOf() {
fun cancelAllJobs() {
for (job in this) {
job.cancel()
}
}
}
Run Code Online (Sandbox Code Playgroud)
基本上相当于
class CompositeJob : MutableList<Job> {
private val impl: MutableList<Job> = mutableListOf()
override fun size() = impl.size()
override fun add(x: Job) { impl.add(x) }
// etc for all other MutableList methods
fun cancelAllJobs() {
for (job in this) {
job.cancel()
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2393 次 |
| 最近记录: |