gpt4 book ai didi

generics - 如何在实现中继承泛型类型而在 Kotlin 中没有泛型接口(interface)?

转载 作者:行者123 更新时间:2023-12-02 12:57:57 25 4
gpt4 key购买 nike

我正在编写这个 SDK,我需要在可公开访问的接口(interface)中将功能定义为:

interface CommonEndPoint {
fun doSomething(listener: IListener<CommonType>)
}

然后在子项目中实现通用接口(interface)为:
interface SpecialEndpoint : CommonEndpoint {
fun doSomething(listener: IListener<SpecialType>)
}

其中 SpecialType 扩展了 CommonType。

我已将逆变通用监听器定义为:
interface IListener<in T> {
receiveResult(result: T)
}

问题是:
  • 我需要 SDK 用户使用 SpecialType,而不是 CommonType
  • 我需要重写方法名称,因为它们是

  • 以下是我迄今为止尝试过的事情:
  • 我已经尝试过泛型函数,它们也不起作用,因为它们需要指定类型。
  • 我不能使用@JvmName,因为这些方法是开放/覆盖
  • 目前我使用带有 protected /内部构造函数的抽象类来定义需要定义和实现的方法

  • 为什么不是通用接口(interface)? 接口(interface)并不意味着是泛型的,因为这些类型只在一个函数中使用,但监听器应该是泛型的,因为它们在项目中的任何地方都使用。另外,应该为具有 Objective-C 兼容性的 iOS 完成相同的实现,这意味着我必须在那里支持轻量级泛型,如果我使接口(interface)成为泛型,我必须为 iOS 编写三遍代码。

    最佳答案

    我认为您需要协方差而不是逆变来使用 SpecialType。我认为 kotlin 页面很有帮助。 https://kotlinlang.org/docs/reference/generics.html

    关于generics - 如何在实现中继承泛型类型而在 Kotlin 中没有泛型接口(interface)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57067195/

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