在Kotlin中,如何改变示例的只读val
字段?
在下面的Kotlin代码中,gson.fromJson(...)
从InstanceCreator
得到一个Thing(0)
,然后设法将value
从0
突变为1
,然后返回该对象。如何实现?
import com.google.gson.GsonBuilder
import com.google.gson.InstanceCreator
class Thing(val value: Int)
fun main() {
val creator = InstanceCreator { Thing(0) }
val gson = GsonBuilder().registerTypeAdapter(Thing::class.java, creator).create()
val thing = gson.fromJson("""{"value":1}""", Thing::class.java)
println(thing.value) // 1
}
我验证了gson.fromJson(...)
返回的对象与InstanceCreator
提供的对象相同,因此它不会基于InstanceCreator
提供的对象创建新示例。
我也尝试过使用反射来设置value
,但是没有找到方法。val
字段上没有可用的setter。
1条答案
按热度按时间u7up0aaq1#
我还尝试使用反射设置值
如果使用Java的反射API而不是Kotlin的API,就可以做到这一点。
Kotlin
val
属性转换为只有公共getter的私有Java字段。您可以使用反射设置私有字段。例如:这可能也是Gson在引擎盖下做的事情。