我正在使用 kotlin 委托属性为我的游戏编写一个保存系统。
这是一个小例子
import kotlin.reflect.KProperty
object Test {
val test: Int by no_prop { 10 } // I want this
val testTwo: Int by prop(::testTwo) { 10 } // I don't want this if possible
}
inline fun <reified T : Any> Test.no_prop(initializer: () -> T) = TestProp<T>()
inline fun <reified T : Any> Test.prop(prop: KProperty<*>, initializer: () -> T): TestProp<T> {
println("My saving key is ${this.javaClass.simpleName}.${prop.name}")
return TestProp<T>()
}
class TestProp<T : Any> {
operator fun getValue(thisRef: Any?, property: KProperty<*>) = 10 as T
operator fun setValue(thisRef: Any?, property: KProperty<*>, value: T) {}
}
我的游戏使用字符串键保存属性。总是如此*callerClassName*.*propertyName*
我想知道是否可以通过我的委托扩展函数或TestProp
访问属性名称的类进行委托?
例如:如果 no_prop 方法可以将调用它的属性命名为“test”,那就太好了
val test: Int by no_prop { 10 }
以下是一种解决方法,但如果可能的话,我想避免对每个属性都这样做
val testTwo: Int by prop(::testTwo) { 10 }