具有通用二维数组的通用函数

怎样才能实现一个通用的函数,创建一个空的通用二维数组? 在下面的代码示例中创建一个空的一维数组,并具有预期的类型。 但是,当我打电话test2D我得到一个错误:

java.lang.ClassCastException: [[Ljava.lang.Object; cannot be cast to [[Ljava.lang.Integer;

 inline fun <reified T> make1D(mask: Array<T>) : Array<T> { val res : Array<T> = arrayOf() return res } @Test fun test1D() { val a : Array<Int> = arrayOf(0) val b : Array<Int> = make1D(a) assertEquals(0, b.size) } inline fun <reified T> make2D(mask: Array<Array<T>>) : Array<Array<T>> { val res : Array<Array<T>> = arrayOf() // I expect T to be equal to Int when calling from test below, // and res to have Integer[][] type; // however it has Object[][] type instead return res } @Test fun test2D() { val a : Array<Array<Int>> = arrayOf(arrayOf(0)) val b : Array<Array<Int>> = make2D(a) assertEquals(0, b.size) } 

我认为你对于具体化的参数来说太深了。 也许这是一个错误,创建一个YouTrack问题将有助于找出。 这个代码在你让T是整个内部数组的时候工作:

 inline fun <reified T> make2D(mask: Array<T>): Array<T> { val res: Array<T> = arrayOf<T>() return res } @Test fun test2D() { val a: Array<Array<Int>> = arrayOf(arrayOf(0)) val b: Array<Array<Int>> = make2D(a) assertEquals(0, b.size) } 

在您创建YouTrack问题后,请在此处发布问题编号以进行跟踪。