我有一个尾递归函数,可以在其中创建嵌套列表,其中传递的参数是链接的hashmap,最初的类型为:
val mapTest = LinkedHashMap<String, Any>()
因此,对递归的调用是
matchTest(mapTest)
我的尾递归解构了地图并做了一堆模式匹配。为简单起见,它是:
tailrec fun <T> matchTest(testMap: Map<T,Any>): Boolean
where T: String, // this is string on initial call
T: List<String>{ // this is List<String> on subsequent calls
val newMap = LinkedHashMap<List<String>, Any>()
var found = false
/*
logic that can create nested lists
*/
return when {
found -> true
else -> matchTest(newMap)
}
}
问题在于,在初始调用之后进行递归调用时,它不会传递一个String
类型的LinkedHashMap,而是List
类型String
}。
天真地,我认为在我的Generic类型上创建多个上界会处理这个(参见上面的函数声明),但是Idea给出的错误是&#34; String不是List&#34的子类型; ...
我也尝试使用星形投影作为列表参数,但是Idea给了我一个错误&#34;不允许在函数和属性的类型参数上进行预测。&#34;
我咆哮着错误的树,以为使用通用数据类型可以解决我如何处理地图中的密钥可以从String
转到List<String>?
的问题
在Python中,当然这很简单,但唉......