我想创建一个通用函数,该函数采用 Array<T> 或 IntArray 并对其进行迭代并执行任意操作。不幸地 IntArray公司 不是的子类型 阵列(<T> 。这在科特林可能吗?
Array<T>
IntArray
IntArray公司
阵列(<T>
不,这不可能直接实现,因为 IntArray 是与 Array<T> 这可能允许一个函数同时处理这两个问题。
但是,您可以定义一个重载来转换 IntArray公司 变成一个 Array<Int> 或者提供不同的优化实施:
Array<Int>
fun <T> foo(items: Array<T>) { /* ... */ } fun <T> foo(items: IntArray) = foo(items.toTypedArray())
请参见: .toTypedArray()
.toTypedArray()
正如您在 kotlin-stdlib 文档中,许多功能都是以这种方式分别定义的 阵列(<T> 和各种基元数组类型(尽管有单独的实现,这比转换数组更有效),例如。 .forEach { ... } ,则, .toList() 。
kotlin-stdlib
.forEach { ... }
.toList()