问题描述
如何才能实现它创建一个空的通用二维数组泛型函数?在下面的code样品空维数组被创建并有预期的类型。然而,当我打电话test2D我得到一个错误:
java.lang.ClassCastException:[Ljava.lang.Object;不能转换为[Ljava.lang.Integer;
在线娱乐与LT;物化T> make1D(面膜:数组< T>):数组< T> {
VAL RES:数组< T> = arrayOf()
返回水库
}@测试
有趣test1D(){
VAL一个:数组<&诠释GT; = arrayOf(0)
VAL乙:阵列<&诠释GT; = make1D(一)
的assertEquals(0,b.size)
}在线娱乐和LT;物化T> make2D(面膜:数组<数组< T>>):数组<数组< T>> {
VAL RES:数组<数组< T>> = arrayOf()
//我希望T可等于从下面的测试呼叫时,INT,
//和资源有整数[] []类型;
然而//它有对象[] []类型,而不是
返回水库
}@测试
有趣test2D(){
VAL一个:数组<数组<&诠释GT;> = arrayOf(arrayOf(0))
VAL乙:阵列<数组<&诠释GT;> = make2D(一)
的assertEquals(0,b.size)
}
我觉得你是一个级别太深的物化参数。也许这是一个错误,创建一个将有助于找到答案。这code ++工程,当你让 T
是整个内数组:
在线娱乐与LT;物化T> make2D(面膜:数组< T>):数组< T> {
VAL RES:数组< T> = arrayOf< T>()
返回水库
}@测试
有趣test2D(){
VAL一个:数组<数组<&诠释GT;> = arrayOf(arrayOf(0))
VAL乙:阵列<数组<&诠释GT;> = make2D(一)
的assertEquals(0,b.size)
}
创建YouTrack问题后,请在这里发表的发行数量进行跟踪。
How can one implement a generic function which creates an empty generic 2D array? In the following code sample an empty 1D array is created and has the expected type. However, when I call test2D I get an error:
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)
}
I think you are one level too deep for the reified parameter. Maybe it is a bug, creating a YouTrack issue will help to find out. This code works when you let T
be the whole inner array:
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)
}
After you create a YouTrack issue, please post the issue number here for tracking.
这篇关于与普通的二维阵列的通用功能的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!