我的以下代码是简化应用程序属性的方法:
class Preference<T>(private val key: String, private val defaultValue: T) : ReadWriteProperty<AppPreferences, T> {
override fun getValue(thisRef: AppPreferences, property: KProperty<*>): T {
@Suppress("UNCHECKED_CAST")
return ((properties.getProperty(key) ?: defaultValue) as T)
}
override fun setValue(thisRef: AppPreferences, property: KProperty<*>, value: T) {
properties.setProperty(key, value.toString())
saveProperties()
}
}
//endregion
//region Variables
var isAuthenticationEnabled by Preference("is_authentication_needed", false)
var timeoutSeconds by Preference("timeout_seconds", 1000)
var adminKey by Preference("admin_key", "")
//endregion
但我需要一种方法来转换属性,它总是作为字符串读取到T.这种方法不起作用的原因很明显,但任何try 转换,例如与When(T)或其他将导致错误"不能使用‘T’作为具体化的类型参数.改用一个类". 所以我的问题是:如何在getValue方法中将该字符串转换为T?
谢谢