Hello stackoverflow社区,
我写了一个使用泛型类型的方法。我感到奇怪的是,这有点复杂。在互联网上,我发现了对数差异和泛型类型差异的概念。但是我做正确的尝试没有成功。有没有办法摆脱第二个(冗余的)通用类型K?
fun <T, K> add(item: TreeItem<K>, startParent: TreeItem<T>, levelIndices: List<Int>) where K : T {
var currentParent = startParent
for ((counter, levelIndex) in levelIndices.withIndex()) {
if (counter == levelIndices.size - 1) {
@Suppress("UNCHECKED_CAST")
currentParent.children.add(levelIndices.last(), item as TreeItem<T>)
break
}
val positionEntryController = currentParent.children[levelIndex].value
if (positionEntryController is PositionHeaderController) {
currentParent = currentParent.children[levelIndex]
} else {
throw NotImplementedError()
}
}
}
关键行在@Suppress("UNCHECKED_CAST")
下,我必须在此处明确强制转换。
我认为这应该允许您删除演员表
fun <T> add(item: TreeItem<in T>, startParent: TreeItem<T>, levelIndices: List<Int>) {