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

Kotlin集合泛型扩展函数如何返回调用者的具体实际类型?

解决方案

可以通过声明带边界的接收者泛型参数实现该需求,修改后的扩展函数如下:

fun <T, L : MutableList<T>> L.fillWith(default: T, targetSize: Int): L = apply {
    if (this is ArrayList<*>) {
        ensureCapacity(targetSize)
    }
    while (size < targetSize) add(default)
}

原理说明

  • 新增泛型参数L,指定其上界为MutableList<T>,直接用L作为接收者类型和返回值类型
  • 配合apply函数返回调用对象本身的特性,调用函数后会直接返回接收者的原始具体类型,无需手动转型
  • 同时修正了原代码的两处问题:补充了ArrayList的泛型星投影避免编译警告,替换了未定义的newSize变量、调整参数名更易读

使用示例

你给出的用法仅需要修正第二行的类型匹配笔误即可正常运行:

// 可直接赋值给LinkedList类型变量
val data1 : LinkedList<String> = LinkedList<String>().fillWith("", 42)
// 右侧传入ArrayList实例即可赋值给对应类型变量
val data2 : ArrayList<String> = ArrayList<String>().fillWith("", 42)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 09:06:03