我正在编写此SDK,在其中我需要在可公开访问的界面中将功能定义为:
interface CommonEndPoint {
fun doSomething(listener: IListener<CommonType>)
}
,然后在子项目中实现通用接口为:
interface SpecialEndpoint : CommonEndpoint {
fun doSomething(listener: IListener<SpecialType>)
}
SpecialType扩展CommonType的地方。
我将反变型通用侦听器定义为:
interface IListener<in T> {
receiveResult(result: T)
}
问题是:
这是到目前为止我尝试过的事情:
为什么不使用通用接口?这些接口不是通用的,因为类型仅在一个函数中使用,但是侦听器应该是通用的,因为它们在项目中的任何地方都将使用。另外,应该为具有Objective-C兼容性的iOS实现相同的实现,这意味着我必须在那里支持轻量级泛型,如果使接口具有泛型,则必须为iOS编写三遍代码。>
答案 0 :(得分:0)
我认为您需要协方差而不是协方差才能使用SpecialType。我认为kotlin页面非常有帮助。 https://kotlinlang.org/docs/reference/generics.html
答案 1 :(得分:0)
最后,我不得不以这种形式使用通用的通用接口:
interface CommonEndPoint<TYPE1 : CommonType> {
fun doSomething(listener: IListener<TYPE1>)
}
像这样在专用端点中继承:
interface SpecialEndpoint : CommonEndpoint<SpecialType> {
fun doSomething(listener: IListener<SpecialType>)
}
最适合Java / Kotlin代码。然后删除侦听器,并切换到iOS / Objective-C的闭包,后者将转换为块。