在RxJava Observable中使用子类

时间:2019-03-25 09:30:53

标签: android generics kotlin rx-java

我在使用以下代码时遇到错误:

interface A1 {
    val string: String
}

data class A2(override var string: String = "") : A1

interface Test {
    fun f(): Observable<List<A1>>
}

fun func(): Observable<List<A2>> = return ...

class TestImpl : Test{
    override fun f(): Observable<List<A1>> = func()
}

代码的最后一行存在类型不匹配。如果可能的话,如何更改它以具有正确的声明?

1 个答案:

答案 0 :(得分:3)

您可以按如下方式通用化您的界面:

interface Test<T: A1> {
    fun f(): Observable<List<T>>
}

然后按以下步骤实施:

class TestImpl : Test<A2> {
    override fun f(): Observable<List<A2>> = func()
}