Kotlin中的函数重载问题

纳曼·简

我试图用字符串列表和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签名冲突。

为了解决您的问题,您有两种不同的解决方案。

  1. 更改其名称并避免签名冲突:
    suspend fun publishRequests(publishRequests: List<PublishRequest>) {}
    suspend fun publishEvents(events: List<String>) {}
  1. 使用具有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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章