Общая функция с общим двумерным массивом

Как реализовать универсальную функцию, которая создает пустой общий массив 2D? В следующем примере кода создается пустой массив 1D и имеет ожидаемый тип. Однако, когда я вызываю 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) } 

    Я думаю, что вы слишком глубоки для параметра reified. Возможно, это ошибка, и проблема с 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, отправьте номер проблемы здесь для отслеживания.