使用 Parceler 与 Kotlin 数据类和构造函数进行序列化

2024-05-20

有没有办法使用Parceler https://github.com/johncarl81/parceler使用 Kotlin 数据类和构造函数进行序列化,无需使用@ParcelProperty每个字段的注释?

如果我尝试使用这样的库:

@Parcel
data class Valve @ParcelConstructor constructor(val size: Int)

I get Error:Parceler: No corresponding property found for constructor parameter arg0。但如果我添加@ParcelProperty("size")它工作得很好。
这是为什么?

Update:
还有其他方法可以使用这个库。
我可以删除@ParcelConstructor注释,但随后我会收到错误
Error:Parceler: No @ParcelConstructor annotated constructor and no default empty bean constructor found.
我认为(尚未测试)我也可以将所有构造函数参数设为可选并添加@JvmOverloads但这有一个副作用,我必须检查类的所有属性是否为空。

Update 2:
这对我有用:

@Parcel
data class Valve(val size: Int? = null)

简而言之,生成的 Java 类必须具有默认的空构造函数。实现这一目标的一种方法是按照上面的方法进行 - 所有变量都应该有默认值。


根据文档,Parceler 默认使用公共字段。但是一个普通的 Kotlindata class(如您的示例中所示)是一个“传统的 getter/setter bean”,因为每个 Kotlin 属性都由私有字段和 getter/[setter] 表示。

TL; DR:我认为这会起作用:

@Parcel(Serialization.BEAN)
data class Valve(val size: Int = 10)

注意默认值,它允许 Kotlin 自动生成一个额外的空构造函数,这是 Java Been 规范所要求的。

另一种方法是标记我们已有的构造函数:

@Parcel(Serialization.BEAN)
data class Driver @ParcelConstructor constructor(val name: String)

具体文件:https://github.com/johncarl81/parceler#gettersetter-serialization https://github.com/johncarl81/parceler#gettersetter-serialization

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Parceler 与 Kotlin 数据类和构造函数进行序列化 的相关文章

随机推荐