2017-03-29 154 views
3

我正在写一个B树,这可能对一个节点多钥匙,我也遇到了问题的数组。当我创建的的int数组一切正常:科特林:泛型

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.' 

问题是如何创建一个泛型数组?

UPD: Thx for all the replies!看来,MutableList是我的目标很好的解决方案。

+1

参见:[?如何在Java中创建一个通用阵列(http://stackoverflow.com/q/529085/7079453) –

+1

使用一个ArrayList如果你没有进行性能关键型操作,而不是阵列是一个更好的选择。的[创建在科特林通用2D阵列] – Naetmul

+0

可能的复制(http://stackoverflow.com/questions/28548647/create-generic-2d-array-in-kotlin) – miensol

回答

3

您可以只使用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 } 
+0

非常真实的,使用'List'代替'Array'越多越好。 JVM上的数组已过时:( – voddan