是否可以将引用传递给基本数组的第i个元素?
现在,在我的代码中的某个地方,我传递了一个对原语的引用,例如一个Int
val i = 0
至
fun whatever(i: KMutableProperty0)
如
whatever(::i)
能够从函数内部获取/设置其值
一切工作到目前为止。
现在我想要为基本数组的第i个元素(如IntArray
相同的IntArray
val arr = intArrayOf(1, 2, 3) whatever(/* passing the reference to item 2 of arr*/)
可能吗?
那么通过引用arr
属性和索引呢?
fun whatever(arr: KMutableProperty0, index: Int) whatever(::arr, i)
这是不可能的,因为Java不允许在数组上进行指针操作。 Kotlin这样做(如果可能的话,在字节码级别)会打破互操作性。
编辑 :看来你不关心真正的数组指针,就像在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)) }
我的猜测是你需要手动为每个本地数组types创建一个包装器,因为它们在Kotlin级别作为非genericstypes公开 。