Proveedor de matriz genérica bidimensional

Estoy tratando de implementar proveedor genérico de matriz bidimensional en Kotlin:

public fun <T> array2dim(sizeOuter: Int, sizeInner: Int): Array<Array<T>> = Array(sizeOuter) { Array(sizeInner) } 

pero no puede entender cómo superar el problema.

El comstackdor dice: Error en la interfaz de tipo: no hay información suficiente para inferir el parámetro T en el constructor Array (tamaño: Int, init: (Int) → T) Especifíquelo explícitamente.

    En primer lugar, a su llamada interna al constructor Array le falta su segundo parámetro init , el lambda donde crea los elementos iniciales que contendrá la Array . Si, por ejemplo, quiere completarlo con el mismo elemento, podría pasarlo como parámetro:

     fun <T> array2dim(sizeOuter: Int, sizeInner: Int, element: T): Array<Array<T>> = Array(sizeOuter) { Array(sizeInner) { element } } 

    También puede usar los índices externo e interno y crear elementos iniciales basados ​​en aquellos:

     fun <T> array2dim(sizeOuter: Int, sizeInner: Int, createElement: (Int, Int) -> T): Array<Array<T>> = Array(sizeOuter) { outerIndex -> Array(sizeInner) { innerIndex -> createElement(outerIndex, innerIndex) } } 

    Si no tiene nada para inicializar su Array al crearla, considere la posibilidad de crear Array internos arrayOfNulls con arrayOfNulls .


    Esto todavía le dará un error acerca de no poder acceder a T ; vea esta respuesta a una pregunta relacionada para la explicación, pero deberá marcar su T como reified (y consecuentemente, su function como en inline ):

     inline fun <reified T> array2dim(sizeOuter: Int, sizeInner: Int, element: T) : Array<Array<T>> = Array(sizeOuter) { Array(sizeInner) { element } }