kotlin在树视图中正确使用协变量和协方差

问题描述 投票:0回答:1

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")下,我必须在此处明确强制转换。

generics kotlin variance contravariance
1个回答
0
投票

我认为这应该允许您删除演员表

fun <T> add(item: TreeItem<in T>, startParent: TreeItem<T>, levelIndices: List<Int>) {
© www.soinside.com 2019 - 2024. All rights reserved.