gpt4 book ai didi

kotlin - kotlin 中的函数重载问题

转载 作者:行者123 更新时间:2023-12-02 13:07:42 24 4
gpt4 key购买 nike

我正在尝试声明两个以字符串列表和 PublishRequest 对象作为参数的挂起方法。但是 IDE 对此给出了错误。错误是使函数之一成为内部函数或删除挂起。但我想在它们内部都使用协程。

    override suspend fun publish(publishRequests: List<PublishRequest>) {
///code

}


suspend fun publish(events: List<String>) {
///code

}

PublishRequest 数据类是内部的。只有当我们添加 publish(events: List) 方法时,问题才会出现。该代码在 publish(publishRequests: List)

中运行良好

你能解释一下为什么会这样吗?

最佳答案

您遇到的问题与type erasure有关.

类型 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
}
}

关于kotlin - kotlin 中的函数重载问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60959027/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com