我使用的是firebase,这是我的数据类定义:
data class ClaimOrder(val address: String? = null,
val amount: Long = 0L,
val isProcessed: Boolean = false,
val onCreate: kotlin.Any? = ServerValue.TIMESTAMP)
但在日志上我看到以下警告:@SerializedName("isProcessed")
我试过@SerializedName("isProcessed")
,但没有运气。
3条答案
按热度按时间j2datikz1#
我找不到Firebase的任何官方文档提到getter和setter的命名规则,但看起来他们正在寻找JavaBean-like getters/setters
当你有一个名为
isProcessed
的属性时,Firebase要求你有一个名为getIsProcessed()
/setIsProcessed()
的getter/setter。但是,当该属性在Kotlin中以is
开头时,应用了不同的命名规则。根据Kotlin文档,它生成名为isProcessed()
/setProcessed()
的getter/setter:如果属性的名称以
is
开头,则使用不同的名称Map规则:getter的名称将与属性名称相同,而setter的名称将通过将is
替换为set
来获得。例如,对于属性isOpen
,getter将称为isOpen()
,setter将称为setOpen()
。此规则适用于任何类型的属性,而不仅仅是Boolean
。nnt7mjpx2#
我不知道确切的原因,但我猜是这样的:
变量名
isProcessed
导致生成不同访问器方法,因此基础gson
和kotlin
方法不匹配然而,只使用
processed
似乎可以很好地解决问题。7vhp5slm3#
由于某种原因,即使我在变量名前面省略了
is
,它仍然无法解析。相反,我通过创建一个自定义构造函数来解决这个问题,如下所示:我是这样分析的:
虽然如果您需要一个大规模的构造函数,这可能不是最好的解决方案,但对于小数据类,它可以很好地工作:)