android - 我用于 Retrofit 接口(interface)创建的通用函数出现编译器错误 : inferred type is Class<T>?,但需要 Class<T!>

标签 android generics kotlin retrofit retrofit2

我在我的 Android (kotlin) 项目中使用 Retrofit。

我创建了我的界面:

interface StudentsInterface {
    @GET("foo/bar/{id}")
    suspend fun getStudent(@Path("id") myId: Int)
}

我创建了一个 MyClient我在其中定义了一个通用函数,用于从任何接口(interface)创建端点服务,如上面定义的代码:

class MyClient() {
    @Inject
    lateinit var  retrofit: Retrofit

    // this is my generic function
    fun <T> createService(interfaceClazz: Class<T>?): T {
        // Compiler error: Type mismatch: inferred type is Class<T>? but Class<T!> was expected
        return retrofit.create(interfaceClazz)
    }
}

这样在另一个类上我就可以:

val sService = myClient.createService(StudentsInterface::class.java)
...

但是当我构建项目时,我总是收到编译器错误:Type mismatch: inferred type is Class<T>? but Class<T!> was expected在代码行return retrofit.create(interfaceClazz)

为什么我会收到此错误?如何摆脱它?

最佳答案

改造创建需要不可为空的参数。尝试使 interfaceClazz 不可为 null

fun <T> createService(interfaceClazz: Class<T>): T {
    // No error now
    return retrofit.create(interfaceClazz)
}

关于android - 我用于 Retrofit 接口(interface)创建的通用函数出现编译器错误 : inferred type is Class<T>?,但需要 Class<T!>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59522202/

相关文章:

android - 在具有相同凭据的两个 Android 应用程序之间共享登录数据

android - 无法将标题 View 添加到列表 - 已调用 setAdapter

java - AndroidManifest.xml 无法正确编译

c++函数模板编译错误 "‘containerType’不是模板”

c# - 类型可以从自身派生吗?

kotlin - 为什么 Kotlin 没有十进制数?

java - 将平面 json 解析为带有类别的数组

java - RESTful 服务返回 String[] 对象时出现问题

android - 无法在 Kotlin Android 中的 Observable 上调用 from() 运算符

Android MVVM 多 API 调用