高阶函数泛型的正确 Kotlin 声明

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

我目前遇到的情况是,我有几个数据类(

Script
FreeScript
),我想在遍历数据集的某些代码中以相同的方式处理它们。例如:

fun toScripts(parseScript: () -> (Script)): List<Script> {
    val result: MutableList<Script> = mutableListOf()
    while (findNextTag("tr") != null) {
        result.add(parseScript(elementsContainer))
    }
    return result
}

fun toFreeScripts(parseFreeScript: () -> (FreeScript)): List<FreeScript> {
    val result: MutableList<FreeScript> = mutableListOf()
    while (findNextTag("tr") != null) {
        result.add(parseFreeScript(elementsContainer))
    }
    return result
}

这些方法之间的唯一区别是它们采用产生不同结果类型的函数,并构造该结果类型的列表。这似乎是使用泛型的一个很好的候选者,但我似乎无法使用正确的声明语法。

请问有好心人可以帮帮我吗?

kotlin generics
1个回答
0
投票

感谢@broot 在正确的方向上的推动。正确的声明是:

fun <T> toScripts(parseScript: () -> T): List<T> {
    val result: MutableList<T> = mutableListOf()
    while (findNextTag("tr") != null) {
        result.add(parseScript(elementsContainer))
    }
    return result
}
© www.soinside.com 2019 - 2024. All rights reserved.