【发布时间】:2017-04-17 12:48:53
【问题描述】:
我正在尝试创建一个定义单个方法的接口。该方法的参数类型必须是接口的类型参数,因为接口的实现将对该参数具有唯一的实现。到目前为止很好,但要注意的是参数还有一个与方法相关的类型参数。我可以将一个类型的参数定义为类类型参数,它也有自己的类型参数,该类型参数与方法相关联吗?
换一种说法:
我正在尝试构建一个具有两种实现的 api 客户端接口。每个客户端都基于传递给他们的rxecute 函数的Request<T> 对象进行api 调用(RxJava + 执行,是的,我为这个名字感到过分自豪)。
我的问题是如何在界面中定义rxecute 方法。让我列出一些示例代码(我的实际代码没有使用impl,别担心)。
interface Request<T> // T is return type of the request
class RequestImpl<T>: Request<T> { // impl }
interface ApiClient<R : Request<*>> {
// R should somehow be of type Request<T>
fun <T> rxecute(request: R): Single<T>
}
class ApiClientImpl : ApiClient<RequestImpl<????>> {
override fun <T> rxecute(request: RequestImpl<T>): Single<T> = // impl
}
我希望能够像这样使用它:
val apiClient = ApiClientImpl()
apiClient.rxecute(RequestImpl<SomeClass>()).subscribe(someClassResult -> ...)
是否可以创建这样的接口或者泛型不能那样工作?
【问题讨论】: