我试图用字符串列表和PublishRequest对象作为参数声明两个暂停方法。但是IDE对此给出了错误。错误是使函数之一成为内部函数,或者除去了挂起。但是我想在它们两个内部都使用协程。
override suspend fun publish(publishRequests: List<PublishRequest>) {
///code
}
suspend fun publish(events: List<String>) {
///code
}
PublishRequest数据类是内部的。仅当我们添加publish(events:List)方法时,问题才会出现。该代码在publish(publishRequests:List)工作正常
你能解释为什么会这样吗?
您面临的问题与类型擦除有关。
类型List<PublishRequest>
和List<String>
被擦除为List<*>
,因此,您将发生JVM签名冲突。
为了解决您的问题,您有两种不同的解决方案。
suspend fun publishRequests(publishRequests: List<PublishRequest>) {}
suspend fun publishEvents(events: List<String>) {}
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
}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句