现在,在我的代码中的某处,我传递了对基元的引用,例如Int
val i = 0
到
fun whatever(i: KMutableProperty0<Int>)
作为
whatever(::i)
能够从函数
中获取/设置其值 到目前为止,一切都很顺利。我现在想对原始数组的第i个元素执行相同的操作,例如IntArray
val arr = intArrayOf(1, 2, 3)
whatever(/* passing the reference to item 2 of arr*/)
有可能吗?
答案 0 :(得分:0)
如何将引用传递给arr
属性和索引?
fun whatever(arr: KMutableProperty0<IntArray>, index: Int)
whatever(::arr, i)
答案 1 :(得分:0)
这是不可能的,因为Java不允许对数组进行指针操作。 Kotlin这样做(如果可能的话,在字节码级别)会破坏互操作性。
编辑:您似乎不关心 true 数组指针,就像在C中一样,因此您可以创建类似于KMutableProperty
的包装器:
class IntArrayRef(val array: IntArray, val index: Int) {
fun get(): Int = array.get(index)
fun set(value: Int) { array[index] = value }
}
fun modify(value: IntArrayRef) {
value.set(4)
}
fun test() {
val s = "abc"
val arr = intArrayOf(1, 2, 3)
modify(IntArrayRef(arr, 1))
}
我的猜测是你需要为每个本机数组类型手动创建一个包装器,因为they are exposed at the Kotlin level as non generic types。