gpt4 book ai didi

firebase - Kotlin-可序列化类中的初始化 block 只能读取默认属性值

转载 作者:行者123 更新时间:2023-12-02 13:34:46 26 4
gpt4 key购买 nike

出于某种原因,每当我尝试访问init块中此可序列化类的属性时,仅显示默认值。我正在使用firebase读取此类中的数据,按预期方式工作。我想根据会场名称参数更改该类的 bool(boolean) 值,但由于仅默认会场名称正在访问而无法更改

class Venue(val venueName: String = "defaultName", val venueImageUrl: String = "", var venueImageName: String = "", val events: List<Event> = emptyList(), var isAd: Boolean = false, var isPromoVenue: Boolean = false

) : Serializable {
val vName = venueName
init {
println(vName)
}
}
#prints("defaultName") for each object created.

最佳答案

该引用来自文档

Pass a custom Java object, if the class that defines it has a default constructor that takes no arguments and has public getters for the properties to be assigned.



表示实例是使用默认构造函数(在这种情况下等效于 Venue())通过反射创建的,然后将执行任何 init块。在构造实例之后,也通过反射来设置字段(因为不需要设置程序)。
Serializable在这里不应该相关(但是它自己的机制根本不调用 Venue的构造函数,因此您甚至看不到 defaultName的打印内容)。

解决方法是,您可以创建一个没有 init的帮助器类。
class VenueDTO(val venueName: String = "defaultName", val venueImageUrl: String = "", val venueImageName: String = "", val events: List<Event> = emptyList(), val isAd: Boolean = false, val isPromoVenue: Boolean = false) : Serializable {
val asVenue get() = Venue(this)
}

class Venue(val asDto: VenueDTO) {
val vName = venueName
init {
println(vName)
}
}

VenueDTO存储在Firebase中,并在检索到后立即将其转换为 Venue

关于firebase - Kotlin-可序列化类中的初始化 block 只能读取默认属性值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59253019/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com