Kotlin: 泛型数组

4

我正在编写一棵B树,可能在一个节点中有许多键,但是我遇到了一个问题。当我创建一个 Ints 数组时,一切正常:

class Node<K: Comparable<K>> (val t: Int) {
    val keys: Array<Int?> = Array<Int?> (t*2-1, {null})
}

但我想创建一个泛型数组Ks

class Node<K: Comparable<K>> (val t: Int) {
    val keys : Array<K?> = Array<K?> (t*2-1, {null})
}

在这种情况下,编译器会抛出以下错误消息:
'Kotlin: Cannot use 'K' as reified type parameter. Use a class instead.'

问题是如何创建一个泛型数组?
更新:感谢所有的回复!看起来MutableList对我的目标是个不错的解决方案。

1
请参见:如何在Java中创建通用数组? - F. George
1
如果您不需要进行性能关键操作,使用ArrayList而不是数组是更好的选择。 - Naetmul
可能是在Kotlin中创建通用2D数组的重复问题。 - miensol
1个回答

5
您可以直接使用 List<K>,它不需要您拥有 reified 类型。
要使用 Array<K> 的泛型参数,您需要将泛型参数设为 reified(以便获取它的类)。
您不能在类中使用 reified,只能在函数中使用,并且函数必须是 inline
因此,建议您尽可能晚地使用 class,具体或非 reified 泛型类型。
同时,您可以使用以下函数。
inline fun <reified K : Comparable<K>> computeKeys(t: Int): Array<K?> =
    Array(t * 2 - 1) { null }

非常正确,尽可能使用List而不是Array。JVM上的数组已经过时了 :( - voddan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接