类内泛型递归函数的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>) {
  // ...
}

那么我想你可能也有Listvs的问题MutableList
curr是 a List<T>,因此您不能将其添加到combinations,它需要 type 的元素MutableList<T>

您可以使用toMutableList()将您的转换ListMutableList

combinations.add(curr.toMutableList())


以上是类内泛型递归函数的Kotlin类型不匹配的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>