我正在使用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 ...
}
Run Code Online (Sandbox Code Playgroud)
我companion object
在内部使用class
了相同的错误,然后不得不继续将其还原RestApiParser
为简单的类,并每次都通过变量调用它,这不能满足我们的需求。
是的,单例结构的编码可能类似于以下使用上限的伴随段:
companion object {
private var instance: RestApiParser<*>? = null
fun <T> getParser(): RestApiParser<T> {
if (instance == null)
instance = RestApiParser<T>()
return instance as RestApiParser<T>
}
}
Run Code Online (Sandbox Code Playgroud)
但是在Kotlin中创建通用对象会很好。
问题:
有什么方法可以在Kotlin中创建通用对象?
如果不是,那么最适合上述情况的是什么?
一个对象是一个单例。单例是仅存在一个实例的事物。类型参数允许为类的特定实例指定类型参数,因此,仅当存在多个实例时才有意义。因此,没有,没有办法在Kotlin中创建通用对象。
在您的RestApiParser
示例中,您可以简单地为每个函数指定类型参数,而将其保留object
为非泛型。使用object
为REST API的回调调用听起来像设计很差,我(因为线程问题,等等),所以我与创建适当类型的参数为每个调用一个新的回调实例替换它。
归档时间: |
|
查看次数: |
2358 次 |
最近记录: |