gpt4 book ai didi

kotlin - Kotlin 中的通用对象

转载 作者:行者123 更新时间:2023-12-04 18:01:21 26 4
gpt4 key购买 nike

我正在尝试使用 Kotlin 为 Android 的一些全局 API 解析器(检查网络连接、调用 API 并通过来自源的单个调用返回格式化数据),并且在某些时候我不得不创建一个通用类型 object就像下面的代码片段一样,当在第一行发现编译错误时,如 Type parameters are not allowed for objects :

object RestApiParser<T> // ERROR(mark under T): Type parameters are not allowed for objects
: Callback<T> {

override fun onFailure(call: Call<T>?, t: Throwable?) {
// bla-bla-blaa codes ...
}

override fun onResponse(call: Call<T>?, response: Response<T>?) {
// bla-bla-blaa codes ...
}

fun getResponse(context: Context, call: Call<T>, callback: RestApiCallback<T>) {
// bla-bla-blaa codes ...
}

fun getList(context: Context, call: Call<ArrayList<T>>, callback: RestApiCallback<T>) {
// bla-bla-blaa codes ...
}

// there are more codes like the above ...
}

我用过 companion objectclass提供相同的错误,然后不得不继续恢复 RestApiParser到一个简单的类并每次都通过一个变量调用它,这不能满足我们的需要。

是的,可以使用 upper-bound 对单例结构进行编码,如下面的伴随段:
companion object {
private var instance: RestApiParser<*>? = null
fun <T> getParser(): RestApiParser<T> {
if (instance == null)
instance = RestApiParser<T>()
return instance as RestApiParser<T>
}
}

但是在 Kotlin 中创建通用对象会感觉很好。

问题:有什么办法可以到 创建通用对象 在 Kotlin ?
不是 ,那还有什么 最佳西装提到的场景?

最佳答案

一个对象是一个单例。单例是只存在一个实例的东西。类型参数允许为类的特定实例指定类型参数,因此,只有在有多个实例时才有意义。因此,不,没有办法在 Kotlin 中创建通用对象。

在您的 RestApiParser例如,您可以简单地为每个单独的函数指定类型参数并保留 object作为非通用。使用 object作为 REST API 调用的回调对我来说听起来很糟糕的设计(因为线程问题等),所以我会用为每个调用创建一个具有正确类型参数的新回调实例来替换它。

关于kotlin - Kotlin 中的通用对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48985008/

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