Generics 处理数组的函数<;T>;或无阵列
我想创建一个通用函数,它接受Generics 处理数组的函数<;T>;或无阵列,generics,kotlin,Generics,Kotlin,我想创建一个通用函数,它接受数组或IntArray并对它们进行迭代并执行任意操作。不幸的是,IntArray不是Array的子类型。这在Kotlin中可能吗?不,这不是直接可能的,因为IntArray是一种单独的类型,与数组没有关系,它允许一个函数同时处理这两种类型 但是,您可以定义一个重载,将IntArray转换为Array或提供不同的优化实现: fun <T> foo(items: Array<T>) { /* ... */ } fun <T> foo(
数组
或IntArray
并对它们进行迭代并执行任意操作。不幸的是,IntArray
不是Array
的子类型。这在Kotlin中可能吗?不,这不是直接可能的,因为IntArray
是一种单独的类型,与数组
没有关系,它允许一个函数同时处理这两种类型
但是,您可以定义一个重载,将IntArray
转换为Array
或提供不同的优化实现:
fun <T> foo(items: Array<T>) { /* ... */ }
fun <T> foo(items: IntArray) = foo(items.toTypedArray())
funfoo(items:Array){/*…*/}
fun foo(items:IntArray)=foo(items.toTypedArray())
见:
正如您在
kotlin stdlib
文档中所看到的,许多函数都是以这种方式为Array
和各种基本数组类型单独定义的(尽管有单独的实现,这比转换数组更有效),例如,不,这不可能直接实现,因为IntArray
是一个单独的类型,它与Array
没有关系,可以允许一个函数同时处理这两种类型
但是,您可以定义一个重载,将IntArray
转换为Array
或提供不同的优化实现:
fun <T> foo(items: Array<T>) { /* ... */ }
fun <T> foo(items: IntArray) = foo(items.toTypedArray())
funfoo(items:Array){/*…*/}
fun foo(items:IntArray)=foo(items.toTypedArray())
见:
正如您在
kotlin stdlib
文档中所看到的,许多函数都是以这种方式分别为Array
和各种基本数组类型定义的(尽管有单独的实现,这比转换数组更有效),例如,这样的函数已经存在:这样的函数已经存在: