gpt4 book ai didi

android - Kotlin:将函数中的对象作为引用传递并更改其实例

转载 作者:行者123 更新时间:2023-11-29 00:03:24 57 4
gpt4 key购买 nike

我找不到如何传递对象的引用,以便让它们指向内存中的新位置。如何在 Kotlin 中执行此操作?

代码:

class Parent {

}

class Child : Parent {

}

class GlobalDataHolder {

var globalChildVriable: Child? = null // imagine this is a static variable and can be accessed anywhere
}

class Activity() {
var variable1 = Child()

Helper.init(variable1, GlobalDataHolder.globalChildVriable) // inside onCreate()

}

class Helper {

initStuff(variable1: Parent, globalVariable: Parent?) {
if (globalVariable == null) {
globalVariable = variable1 // error saying val cannot be re-assigned
}
else {
variable1 = globalVariable!!
}

}
}

我希望 variable1 和 globalVariable 是可修改的。因此,它们的原始所有者将拥有最新的值。

最佳答案

Kotlin(和 Java)不像 C/C++ 那样原生支持引用类型。但是,kotlin 确实具有属性和功能类型。
属性基本上只是 2 个函数(getter 和 setter)的组合。您可以将属性作为参数传递,并通过反射从不同的上下文中分别调用它们的 getter setter。

更新的(可编译的)代码:

open class Parent { }

open class Child : Parent() { }


var globalVariable: Child? = null


class Activity() {

var localVariable = Child()

init {
Helper.initStuff(this::localVariable, ::globalVariable)
}

}

object Helper {

fun initStuff(localProperty: KMutableProperty0<out Parent>, globalProperty: KMutableProperty0<out Parent?>) {
val globalVariable = globalProperty.call()
val variable1 = localProperty.call()

if (globalVariable == null) {
globalProperty.setter.call(variable1)
}
else {
variableProperty.setter.call(globalVariable)
}

}
}

关于android - Kotlin:将函数中的对象作为引用传递并更改其实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46825772/

57 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com