Generics 获取要创建的改装接口类的函数导致错误的返回类型
我正在开发一个有3个天气API的应用程序,我希望我的用户能够选择使用哪一个。每个API都有各自的数据格式,所以我想创建一个函数来创建适当的接口,然后对其进行封装,所以结果是很常见的,这样我就可以用相同的方式处理每个接口。 因此,我的代码如下所示:Generics 获取要创建的改装接口类的函数导致错误的返回类型,generics,kotlin,retrofit2,Generics,Kotlin,Retrofit2,我正在开发一个有3个天气API的应用程序,我希望我的用户能够选择使用哪一个。每个API都有各自的数据格式,所以我想创建一个函数来创建适当的接口,然后对其进行封装,所以结果是很常见的,这样我就可以用相同的方式处理每个接口。 因此,我的代码如下所示: fun create(api: Apis): ApiDataSource = retrofitBuilder .baseUrl(getBaseUrlFor(api)) .build() .create(g
fun create(api: Apis): ApiDataSource = retrofitBuilder
.baseUrl(getBaseUrlFor(api))
.build()
.create(getInterfaceClassFor(api))
.convertWith(interfaceConverter)
}
fun Api1.convertWith(interfaceConverter: InterfaceConverter): CommonWeatherDataEntity = ...
private fun getInterfaceClass(api: Apis): Class<*> = when (api) {
Apis.Api1 -> Api1Interface::class.java
Apis.Api2 -> Api2Interface::class.java
}
因为(…)时为
推断的类型不是Class
,而是Class
,其中X
是Api1Interface
和Api2Interface
的常见超类型。因此create
返回X
通过删除getInterfaceClass
的返回类型并检查IDE显示的内容,您应该能够看到这一点
fun Apis.createInterface(retrofitBuilder: Retrofit.Builder) =
retrofitBuilder.baseUrl(getBaseUrlFor(this))
.build()
.create(
when (this) {
Apis.Api1 -> Api1Interface::class.java
Apis.Api2 -> Api2Interface::class.java
}
).convertWith(interfaceConverter)