繁体   English   中英

Kotlin:为什么@Parcelize要求在主构造函数中声明所有序列化的属性?

[英]Kotlin: Why @Parcelize requires all serialized properties to be declared in the primary constructor?

在许多情况下,我不需要从主构造函数中传入一个字段,例如,在初始化后已分配了一个字段,并已采取了一些步骤。 字段直接访问全局变量(例如静态变量,例如其他持久数据)。

现在,我有一个折衷的解决方案是在主构造函数中使用vardefault value ,或者覆盖companion object: Parceler <Model>所有序列化方法,这两种方法都有缺点。

Kotlin为什么要这样设计? 有更好的解决方案吗?

因为那是序列化的工作方式。 例如,你有

data class User(val name: String, val id: Int)

val user = User("foo", 1)

并序列化为JSON( @Parcelize不会序列化为JSON。这是一个示例。)

{
  "name": "foo",
  "id": 1
}

反序列化JSON时,需要从上面的JSON重新创建对象。 如果没有具有所有必要字段的主构造函数,它将无法创建相同的对象。

如果您有一个复杂的对象,则可以创建一个单独的类进行序列化,并创建一个工厂方法来接受该类。

或者,您可以自己实现Parcelable然后可以看到为什么需要构造函数中的所有字段。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM