我试图在Kotlin中实现通用的二维数组提供程序:
public fun <T> array2dim(sizeOuter: Int, sizeInner: Int): Array<Array<T>>
= Array(sizeOuter) { Array(sizeInner) }
但无法弄清楚如何克服这个问题。
编译器说:类型接口失败:没有足够的信息来推断参数T in 构造函数数组 ( 大小:Int, init:(Int)→T ) 请明确说明。
答案 0 :(得分:4)
首先,您的内部Array
constructor调用缺少其第二个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
时无法初始化Array
,请考虑使用arrayOfNulls
创建可为空的内T
。
这些仍然会给您一个关于无法访问T
的错误 - 请参阅this answer相关问题以获取解释,但您需要将reified
标记为inline
(因此,您的职能为inline fun <reified T> array2dim(sizeOuter: Int, sizeInner: Int, element: T)
: Array<Array<T>>
= Array(sizeOuter) { Array(sizeInner) { element } }
):
<script type="text/javascript">alert("test")</script>