我想创建一个泛型函数,它接受Array<T>
或IntArray
并迭代它们并执行任意操作。很遗憾,IntArray
不是Array<T>
的子类型。这在Kotlin有可能吗?
答案 0 :(得分:4)
不,它不是直接可能的,因为IntArray
是一个与Array<Int>
无关的单独类型,可以允许单个函数同时处理这两个。
但是,您可以定义一个重载,将fun <T> foo(items: Array<T>) { /* ... */ }
fun <T> foo(items: IntArray) = foo(items.toTypedArray())
转换为kotlin-stdlib
或提供不同的优化实现:
Array<T>
请参阅:.toTypedArray()
正如您在subscription
文档中所看到的,对于next
和各种原始数组类型,许多函数都以这种方式单独定义(尽管使用单独的实现,这比转换数组更有效),例如.forEach { ... }
,.toList()
。