You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为Kotlin高阶函数声明正确的泛型?

泛型重构方案

你完全可以用Kotlin的泛型来统一这两个重复函数,核心是用泛型参数替代具体的Script和FreeScript类型,让函数逻辑复用。

首先是重构后的通用函数:

// 声明泛型参数<T>,代表要处理的目标类型
fun <T> toItems(parseItem: (ElementsContainer) -> T): List<T> {
    val result = mutableListOf<T>()
    while (findNextTag("tr") != null) {
        result.add(parseItem(elementsContainer))
    }
    return result
}

关键说明:

  • <T>:在函数名前声明泛型参数,用来指代任意类型(这里就是Script或FreeScript)
  • parseItem: (ElementsContainer) -> T:修正了原函数的参数问题——原代码里parseScript声明是无参,但调用时传了elementsContainer,所以这里明确让解析函数接收ElementsContainer并返回泛型类型T
  • 返回值List<T>:最终生成的列表类型会和解析函数的返回类型自动匹配

调用方式

替换原来的两个函数,直接调用这个通用函数即可:

// 生成Script列表,直接传解析函数引用
val scripts: List<Script> = toItems(::parseScript)

// 生成FreeScript列表
val freeScripts: List<FreeScript> = toItems(::parseFreeScript)

如果你的解析逻辑是匿名函数,也可以这么写:

val scripts = toItems { container ->
    // 这里写原来parseScript的逻辑,返回Script实例
    Script(...)
}

这样就彻底消除了代码重复,同时保留了类型安全。

内容的提问来源于stack exchange,提问作者BobDoolittle

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 07:17:33