类内泛型递归函数的Kotlin类型不匹配
我有以下类,用于计算所有有序集的集合:
class PowerSet<T>(val inputSet: List<T>, val minLength: Int = 4) {
private var combinations = mutableListOf<MutableList<T>>()
init {
powerset(listOf(), inputSet)
}
private fun <T> powerset(curr: List<T>, left: List<T>) {
if (curr.size > this.minLength) {
combinations.add(curr)
}
if (left.isEmpty()) {
return
}
for ((index, value) in left.withIndex()) {
val subList = left.subList(0, index) + left.subList(index + 1, left.size)
val newList = curr + listOf(value)
powerset(newList, subList)
}
}
}
出现以下错误:
Type mismatch.
Required:
MutableList<T#1 (type parameter of com.example.PowerSet)>
Found:
List<T#2 (type parameter of com.example.PowerSet.powerset)>
不知道为什么会这样。
回答
这是因为您的方法powerset
有自己的类型参数T
。
您应该删除<T>
那里,因为您希望T
与班级的 相同T
:
private fun powerset(curr: List<T>, left: List<T>) {
// ...
}
那么我想你可能也有List
vs的问题MutableList
。
curr
是 a List<T>
,因此您不能将其添加到combinations
,它需要 type 的元素MutableList<T>
。
您可以使用toMutableList()
将您的转换List
为MutableList
:
combinations.add(curr.toMutableList())