Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.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
Generics 复制Kotlin数组减去特定索引处的元素_Generics_Kotlin_Types - Fatal编程技术网

Generics 复制Kotlin数组减去特定索引处的元素

Generics 复制Kotlin数组减去特定索引处的元素,generics,kotlin,types,Generics,Kotlin,Types,我试图编写一个Kotlin函数来复制一个数组,其中一个元素被切掉。到目前为止,我得到的是: inline fun <reified T> minusIndex(s: Array<T>, i: Int): Array<T> { val r = arrayOfNulls<T>(s.size - 1) System.arraycopy(s, 0, r, 0, i) System.arraycopy(s, i + 1, r, i,

我试图编写一个Kotlin函数来复制一个数组,其中一个元素被切掉。到目前为止,我得到的是:

inline fun <reified T> minusIndex(s: Array<T>, i: Int): Array<T> {
    val r = arrayOfNulls<T>(s.size - 1)
    System.arraycopy(s, 0, r, 0, i)
    System.arraycopy(s, i + 1, r, i, r.size - i)
    return r.requireNoNulls()
}
内联索引(s:Array,i:Int):数组{
val r=阵列尺寸(s.尺寸-1)
系统阵列副本(s、0、r、0、i)
System.arraycopy(s,i+1,r,i,r.size-i)
返回r.requirenoulls()
}
它最初不会生成类型为
t
的数组,但一旦添加了
inline
reified
关键字,它就会对该部分感到满意

它不会直接返回
r
,因为
r
Array
类型,我想返回
Array
,好吧,这是可以理解的

但是
requirenoulls
不起作用;它似乎在说它想要
Any
,取而代之的是
T
,这似乎是类型系统的一个微妙的怪癖,而不是我对Java的理解

我做错了什么,解决这个问题的最佳方法是什么?

requirenoulls()返回一个类型不可为null的数组。您的代码显示了一个错误,因为生成的数组的类型肯定是不可为空的,但是您的函数应该返回一个
array
,其中
T
可能为空

要指定
T
不可为空,可以指定它扩展
Any
,而不是默认的
Any?

inline fun <reified T: Any> minusIndex(s: Array<T>, i: Int): Array<T> {
    val r = arrayOfNulls<T>(s.size - 1)
    System.arraycopy(s, 0, r, 0, i)
    System.arraycopy(s, i + 1, r, i, r.size - i)
    return r.requireNoNulls()
}
inline fun <reified T> minusIndex(s: Array<T>, i: Int): Array<T> {
    val r = arrayOfNulls<T>(s.size - 1)
    System.arraycopy(s, 0, r, 0, i)
    System.arraycopy(s, i + 1, r, i, r.size - i)
    @Suppress("UNCHECKED_CAST")
    return r as Array<T>
}