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
相关产品推荐
相关产品推荐

