如果我有一个接收 aCallback作为参数的函数,我如何使用子类/派生类的“集合”或“组”调用此函数,Callback以便根据接收到的参数,我可以启用/禁用如果收到子类/派生类“具有”或“匹配”功能,则某些功能?
例如
import kotlin.random.Random
interface Callback
interface FruitsCallback : Callback {
fun onFruitsDeleted(ignored: Int)
}
interface VegetablesCallback : Callback {
fun onVegetablesDeleted(ignored: Int)
}
class FruitsStore : FruitsCallback {
override fun onFruitsDeleted(ignored: Int) {
throw NotImplementedError()
}
}
class VegetablesStore : VegetablesCallback {
override fun onVegetablesDeleted(ignored: Int) {
throw NotImplementedError()
}
}
fun delete(callback: Callback) {
if (callback is FruitsCallback) {
// Delete 5 fruits
callback.onFruitsDeleted(5)
}
if (callback is VegetablesCallback) {
// Delete 7 vegetables
callback.onVegetablesDeleted(7)
}
}
fun main() {
val fruitsStore = FruitsStore()
val vegetablesStore = VegetablesStore()
val callback: Callback = if (Random.nextBoolean()) {
fruitsStore + vegetablesStore
} else fruitsStore
delete(callback)
}
main()当我尝试执行时,错误出现在方法中fruitsStore + vegetablesStore。这显示了类型不匹配问题。关于 kotlin 的一些事情.plus()。
但是,我如何在使用时将以下类型添加在一起coroutines?
val exceptionHandler = CoroutineExceptionHandler { context, throwable -> println("$throwable") }
val coroutineContext = Dispatchers.Main + SupervisorJob() + exceptionHandler
我想知道如何coroutineContext能够接收一组这些类型的实例并将它们表示为一个。
我对科特林相当陌生。请解释:
- 为什么我做不到?
- 为什么协程可以做到?
- 这个叫什么?
- 在上面的例子中我怎么能做到这一点?