Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/vim/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 具有泛型2D数组的泛型函数_Arrays_Generics_Kotlin - Fatal编程技术网

Arrays 具有泛型2D数组的泛型函数

Arrays 具有泛型2D数组的泛型函数,arrays,generics,kotlin,Arrays,Generics,Kotlin,如何实现创建空通用二维数组的通用函数?在下面的代码示例中,将创建一个空1D数组,并具有预期的类型。但是,当我调用test2D时,我得到一个错误: java.lang.ClassCastException:[[Ljava.lang.Object;不能强制转换为[[Ljava.lang.Integer; inline fun <reified T> make1D(mask: Array<T>) : Array<T> { val res : Array<T

如何实现创建空通用二维数组的通用函数?在下面的代码示例中,将创建一个空1D数组,并具有预期的类型。但是,当我调用test2D时,我得到一个错误:

java.lang.ClassCastException:[[Ljava.lang.Object;不能强制转换为[[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)
}
inlinefunmake1d(掩码:数组):数组{
val res:Array=arrayOf()
返回res
}
@试验
趣味测试1d(){
val a:Array=arrayOf(0)
valb:Array=make1D(a)
资产质量(0,b.尺寸)
}
内联fun make2D(掩码:数组):数组{
val res:Array=arrayOf()
//从下面的测试调用时,我希望T等于Int,
//和res具有整数[][]类型;
//但是,它具有对象[][]类型
返回res
}
@试验
趣味test2D(){
vala:Array=arrayOf(arrayOf(0))
valb:Array=make2D(a)
资产质量(0,b.尺寸)
}

我认为对于具体化的参数来说,您的级别太深了一层。也许这是一个bug,创建一个将有助于发现它。当您让
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)
}
inlinefunmake2d(掩码:数组):数组{
val res:Array=arrayOf()
返回res
}
@试验
趣味test2D(){
vala:Array=arrayOf(arrayOf(0))
valb:Array=make2D(a)
资产质量(0,b.尺寸)
}
创建YouTrack问题后,请在此处张贴问题编号以进行跟踪。