gpt4 book ai didi

android - 如何在 Kotlin 中处理 "lock"静态对象

转载 作者:行者123 更新时间:2023-11-29 15:36:31 25 4
gpt4 key购买 nike

嗯,我有一种情况,在 A 类 中我得到“X 数据”。我想将此“X 数据”存储在 Object X 中一次,然后确保无法更改此对象的值。 (设置一次,忘记它)。

我的方法:

object X {
var attribute1: String
var attribute2: String
}

显然,由于对象属性是 var,因此它们在未来是可变的。我怎样才能避免这种情况?有没有办法分配值(在某些时候......)然后锁定对象直到应用程序退出?

最佳答案

您可以使用委托(delegate)属性

class MyProperty<T : Any> {

private var value: T? = null

operator fun getValue(myObject: MyObject, property: KProperty<*>): T =
value ?: throw UninitializedPropertyAccessException()

operator fun setValue(thisRef: Any?, property: KProperty<*>, value: T) = when (this.value) {
null -> this.value = value
else -> throw IllegalAccessException("Property already initialized")
}
}

然后在你的对象中使用var

object MyObject {

var myProperty by MyProperty<String>()

}

在上面的示例中,如果您在设置值之前尝试访问 myProperty,则会抛出异常,但您可以按需要处理(返回默认值?也许是 null?)。

如果您尝试多次分配该值,您也会遇到异常,但您可以采用不同的方式处理,例如,不再设置该值,这样

MyObject.myProperty = "foo"
MyObject.myProperty = "bar"
println(MyObject.myProperty)

将打印"foo"

关于android - 如何在 Kotlin 中处理 "lock"静态对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48642222/

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