二维通用数组提供者
我试图在Kotlin中实现通用的二维数组提供程序:
public fun <T> array2dim(sizeOuter: Int, sizeInner: Int): Array<Array<T>> = Array(sizeOuter) { Array(sizeInner) }
但无法弄清楚如何解决这个问题。
编译器说: 类型接口失败:没有足够的信息来推断构造函数中的参数T Array(size:Int,init:(Int)→T)请明确指定。
首先,您的内部Array
构造函数调用缺少其第二个init
参数,lambda,您在其中创建Array
将包含的初始元素。 如果你想用相同的元素来填充它,你可以把它作为参数传递给它:
fun <T> array2dim(sizeOuter: Int, sizeInner: Int, element: T): Array<Array<T>> = Array(sizeOuter) { Array(sizeInner) { element } }
您也可以使用外部和内部索引,并基于这些索引创建初始元素:
fun <T> array2dim(sizeOuter: Int, sizeInner: Int, createElement: (Int, Int) -> T): Array<Array<T>> = Array(sizeOuter) { outerIndex -> Array(sizeInner) { innerIndex -> createElement(outerIndex, innerIndex) } }
如果在创建时没有任何初始化Array
,请考虑使用arrayOfNulls
创建可空的内部Array
。
这些仍然会给你一个关于不能访问T
的错误 – 请看这个解答的相关问题的答案,但是你需要把你的T
标记为reified
(因此你的函数是inline
):
inline fun <reified T> array2dim(sizeOuter: Int, sizeInner: Int, element: T) : Array<Array<T>> = Array(sizeOuter) { Array(sizeInner) { element } }