Nam*_*ain 3 kotlin kotlin-android-extensions kotlin-coroutines
我试图声明两个挂起方法,以 String 和 PublishRequest 对象列表作为参数。但 IDE 却给出了错误。错误是使函数之一成为内部函数或删除挂起。但我想在它们两个内部使用协程。
override suspend fun publish(publishRequests: List<PublishRequest>) {
///code
}
suspend fun publish(events: List<String>) {
///code
}
Run Code Online (Sandbox Code Playgroud)
PublishRequest 数据类是内部的。仅当我们添加publish(events: List)方法时,问题才会出现。代码运行良好,发布(publishRequests:List)
你能解释一下为什么会发生这种情况吗?
您面临的问题与类型擦除有关。
类型List<PublishRequest>和List<String>被删除为List<*>,因此,您将遇到 JVM 签名冲突。
为了解决您的问题,您有两种不同的解决方案。
suspend fun publishRequests(publishRequests: List<PublishRequest>) {}
suspend fun publishEvents(events: List<String>) {}
Run Code Online (Sandbox Code Playgroud)
reified并处理该函数内的不同类型类:suspend inline fun <reified T> publish(objects: List<T>) {
when {
PublishRequest::class.java.isAssignableFrom(T::class.java) -> // it's a list of PublishRequest
T::class == String::class -> // it's a list of String
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1424 次 |
| 最近记录: |