代码之家  ›  专栏  ›  技术社区  ›  Casebash

处理数组或数组的函数

  •  1
  • Casebash  · 技术社区  · 7 年前

    我想创建一个通用函数,该函数采用 Array<T> IntArray 并对其进行迭代并执行任意操作。不幸地 IntArray公司 不是的子类型 阵列(<T> 。这在科特林可能吗?

    1 回复  |  直到 7 年前
        1
  •  4
  •   hotkey    7 年前

    不,这不可能直接实现,因为 IntArray 是与 Array<T> 这可能允许一个函数同时处理这两个问题。

    但是,您可以定义一个重载来转换 IntArray公司 变成一个 Array<Int> 或者提供不同的优化实施:

    fun <T> foo(items: Array<T>) { /* ... */ }
    
    fun <T> foo(items: IntArray) = foo(items.toTypedArray())
    

    请参见: .toTypedArray()

    正如您在 kotlin-stdlib 文档中,许多功能都是以这种方式分别定义的 阵列(<T> 和各种基元数组类型(尽管有单独的实现,这比转换数组更有效),例如。 .forEach { ... } ,则, .toList()