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

Kotlin中能否为基础类型数组编写通用函数合并重复打印逻辑?

Kotlin合并DoubleArray、BooleanArray打印函数的实现方案

Kotlin 中的 DoubleArray、BooleanArray 这类基础类型特化数组是为了避免泛型装箱开销设计的,和泛型 Array<T> 不属于同一继承体系,所以不能直接用普通泛型 Array<T> 同时匹配这两种类型,但可以通过以下两种方案合并重复代码:

方案1:抽取公共逻辑(最推荐)

将重复的遍历打印逻辑抽为私有高阶辅助函数,对外的重载仅传入数组大小和下标取数逻辑即可,保留编译期类型检查,无额外性能开销:

// 内部复用的公共打印逻辑
private fun printArray(size: Int, getElement: (Int) -> Any) {
    print("[")
    for (i in 0 until size) {
        if (i == size - 1) {
            print(getElement(i))
        } else {
            print("${getElement(i)}, ")
        }
    }
    print("]")
}

// 对外暴露的重载,仅需一行调用公共逻辑
fun print(arr: DoubleArray) = printArray(arr.size) { arr[it] }
fun print(arr: BooleanArray) = printArray(arr.size) { arr[it] }
// 后续要支持IntArray、FloatArray等其他基础类型数组,只需新增一行重载即可

方案2:单函数实现(无需重载)

如果希望只对外暴露一个打印函数,可以用Any参数加类型判断实现,类型检查会移到运行期,有少量转List的装箱开销:

fun print(arr: Any) {
    val elements = when(arr) {
        is DoubleArray -> arr.toList()
        is BooleanArray -> arr.toList()
        else -> throw IllegalArgumentException("仅支持DoubleArray、BooleanArray类型参数")
    }
    print("[")
    for (i in elements.indices) {
        if (i == elements.size - 1) print(elements[i]) else print("${elements[i]}, ")
    }
    print("]")
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 02:06:02