【发布时间】:2019-02-16 19:58:04
【问题描述】:
在一个 Kotlin 项目中,我让 Gson 将来自 JSON 源的数据注入到我创建的一些类中。数据注入,但类 init{...} 从未被调用。
import com.google.gson.GsonBuilder
fun main(args: Array<String>) {
val myClass1 = MyClass("Hello!")
// should have printed "Hello!"
val jsonOfMyClass = "{myData:\"Hey!\"}"
val gson = GsonBuilder().create()
val myClass2 = gson.fromJson(jsonOfMyClass, MyClass::class.java)
// should have printed "Hey!" but it doesn't init?
myClass2.printData()
// so I have to manually call my own init
}
class MyClass constructor(private val myData: String) {
init {
printData()
}
fun printData() {
println("My Data: $myData")
}
}
无需手动调用的结果:
<!-- language: lang-none -->
My Data: Hello!
手动调用的结果:
<!-- language: lang-none -->
My Data: Hello!
My Data: Hey!
不应该这样称呼吗?它正在实例化我的类,对吧?
如果没有,有没有办法强制 init{...}?还是我必须调用公共方法(就像我在示例中所做的那样?)
【问题讨论】:
-
Gson 不调用构造函数。如果您需要该行为,请实现自定义 JsonDeserializer。
标签: java kotlin initialization gson