Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
类内泛型递归函数上的Kotlin类型不匹配_Kotlin_Generics - Fatal编程技术网

类内泛型递归函数上的Kotlin类型不匹配

类内泛型递归函数上的Kotlin类型不匹配,kotlin,generics,Kotlin,Generics,我有一个类,用于计算所有有序集的集合: class PowerSet<T>(val inputSet: List<T>, val minLength: Int = 4) { private var combinations = mutableListOf<MutableList<T>>() init { powerset(listOf(), inputSet) } private fun <

我有一个类,用于计算所有有序集的集合:

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)
        }
    }
}
class电源集(val输入集:列表,val最小长度:Int=4){
私有变量组合=mutableListOf()
初始化{
电源集(listOf(),inputSet)
}
私人娱乐动力集(当前:列表,左:列表){
如果(curr.size>this.minLength){
组合。添加(当前)
}
if(left.isEmpty()){
返回
}
对于左.withIndex()中的((索引,值){
val subList=left.subList(0,索引)+left.subList(索引+1,left.size)
val newList=curr+listOf(值)
电源集(新列表,子列表)
}
}
}
出现以下错误:

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
相同:

private fun powerset(当前:列表,左:列表){
// ...
}
那么我想你也可能对
List
vs
MutableList
有问题。
curr
是一个
列表
,因此不能将其添加到
组合
,该组合需要类型为
可变列表
的元素

您可以使用
toMutableList()
列表
转换为
可变列表

compositions.add(curr.toMutableList())

这是因为您的方法
powerset
有自己的类型参数
T

您应该删除那里的
,因为您希望
T
与类的
T
相同:

private fun powerset(当前:列表,左:列表){
// ...
}
那么我想你也可能对
List
vs
MutableList
有问题。
curr
是一个
列表
,因此不能将其添加到
组合
,该组合需要类型为
可变列表
的元素

您可以使用
toMutableList()
列表
转换为
可变列表

compositions.add(curr.toMutableList())