我正在使用Gsson转换JSON to Kotlin data class. 在创建数据类对象时,我想解析init方法中的值。但init从未调用和生成的对象的值为空。
data class Configuration (val groupId:Int, val key:String, val source:String){
val query:String
val search:String
init {
val obj = JSONObject(key)
query = obj.getString("q")
search = obj.getString("search")
}
}
Run Code Online (Sandbox Code Playgroud)
当我配置的从对象Gson,query和search值始终null和init永远不会执行块。我也试过 constructor 没有data关键字,结果是一样的。
Dem*_*god 10
init块仅在调用主构造函数时执行。但是gson在将 json 解析为对象时不会调用主构造函数。
为了解决这个问题,我认为你应该实现query和search作为一个get方法或者使用lazy init。像这样的东西:
data class Configuration(val groupId: Int, val key: String, val source: String) {
var query: String = ""
get() {
if (field == null) {
initInternal()
}
return field
}
private set
var search: String? = null
get() {
if (field == null) {
initInternal()
}
return field
}
private set
private fun initInternal() {
val obj = JSONObject(key)
query = obj.getString("q")
search = obj.getString("search")
}
}
Run Code Online (Sandbox Code Playgroud)
或任何其他最适合您要求的方法。
| 归档时间: |
|
| 查看次数: |
2445 次 |
| 最近记录: |