Kotlin:理解泛型问题

时间:2016-06-14 16:03:38

标签: generics kotlin

我有一个实现两个接口的模型

interface A
interface B
class Model() : A, B

当我将一个参数作为我的Model类的List传递时,编译器理解Model是A和B.但是当我传递两个参数时,其中一个参数给出了类型T(其中T:A,T: B),编译器无法理解它。

protected fun <T> test(givenList: List<T>) where T : A, T : B {

    val testList = ArrayList<Model>()
    oneParamFunc(testList) // will compile
    oneParamFunc(givenList) // will compile

    twoParamFunc(givenList, testList) // won't  compile (inferred type Any is not a subtype of A)
    twoParamFunc<T>(givenList, testList) // won't compile (Required List<T>, Found ArrayList<Model>)
}

protected fun <T> oneParamFunc(list: List<T>) where T : A, T : B { }
protected fun <T> twoParamFunc(oldList: List<T>, newList: List<T>) where T : A, T : B { }

我需要更改什么才能使其正常工作?

1 个答案:

答案 0 :(得分:4)

TModel可能不是同一类型。因此,每个列表参数都需要单独的通用参数:

fun <T1, T2> twoParamFunc(oldList: List<T1>, newList: List<T2>)
        where T1 : A, T1 : B, T2 : A, T2 : B { }