jav*_*dba 5 serialization kotlin
我是新来的kotlin
,但一个老将scala
。到目前为止,前者给我留下了深刻的印象。但此刻我正在解决一个令人头疼的问题——data class
它没有实现Serializable
。我不知道如何期望具有该名称的类不会经常以这种方式使用。
排除该支持的技术挑战是什么?我很感兴趣,因为我想创建一个包装器。似乎期望总是提供一个serializer()
? 这很麻烦,实际上kotlinx.serialization
还没有为我工作 - 即使经过一些努力。
如果您的意思是java.io.Serializable
(基于与 Scala 和“实现”的类比)或kotlinx.serialization.Serializable
(基于第二段和评论中的讨论),这个问题有点不清楚。
首先,对于Java:
我认为你应该说的方式是:为什么Serializable
默认情况下数据类不实现?: Serializable
如果需要,您可以随时添加。
然后你可以注意到,这并不是 Kotlin 要求你比 Scala 更明确的唯一地方。对于另一个数据类示例,您需要标记Scala默认假定的属性val
或var
其中的属性val
。对于非数据类,Scala 允许您val
在类中使用非构造函数参数,有效地将它们提升到private val
Kotlin 没有的地方。
对于Serializable
具体为:
它将优先考虑声誉不佳的 Java 序列化(如评论中所述)。
Serializable
不能用于跨平台(或仅 Kotlin/JS 或 Kotlin/Native)项目。也许数据类只能在 JVM 上序列化,但这将是平台之间不必要的不匹配。
Serializable
即使case 类具有非Serializable
属性,它们也会实现,并且如果您实际尝试序列化它们,则会抛出异常。
在扩展一个特征的多个案例类的常见情况下,如果您忘记进行特征extends Product with Serializable
类型推断,通常会给出丑陋的类型。
对于 Kotlin Serialization,答案甚至更简单:您不希望数据类等基本语言功能依赖于实验性和不成熟的库。如果数据类@Serializable
在像协程在 1.3 中那样“毕业”时成为默认值,我不会感到惊讶。
归档时间: |
|
查看次数: |
2350 次 |
最近记录: |