Kotlin中data class下的by lazy字段 在Gson环境中使用要注意

82 阅读1分钟

by lazy字段使用的时候,遇到空指针报错:

Attempt to invoke interface method 'java.lang.Object kotlin.Lazy.getValue()

结论:原因是,该实例是由Gson解析创建的,Gson创建对象,不一定会执行对象的构造方法,造成Lazy代理对象没有创建。

实体类

data class Person(val name: String, val age: Int) {
    private val nameAndAge by lazy {
        name + age
    }
}

by lazy 实质是一个委托对象,它是由构造方法中进行创建的

image.png

Gson反射创建对象的过程,不一定会执行对象的构造方法,取决于最终设置的反射创建对象的方式

image.png

image.png