Kotlin中的通用对象

Tou*_*hid 5 kotlin

我正在使用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中创建通用对象
如果不是,那么最适合上述情况的是什么?

yol*_*ole 6

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

在您的RestApiParser示例中,您可以简单地为每个函数指定类型参数,而将其保留object为非泛型。使用object为REST API的回调调用听起来像设计很差,我(因为线程问题,等等),所以我与创建适当类型的参数为每个调用一个新的回调实例替换它。