可在Kotlin中序列化

Mor*_*eu5 6 android kotlin

在我的Android应用程序中,我有一个TreeMap我可以愉快地放入Bundle类似的东西

bundle.putSerializable("myHappyKey", myHappyTreeMap);
Run Code Online (Sandbox Code Playgroud)

但现在我将我的应用程序移植到Kotlin,Android Studio抱怨这Serializable!是必需的,但它正在找到一个Map.

我该如何处理?

编辑如果我将地图投射到一个警告,警告似乎就消失了Serializable.这是这样的吗?

编辑2我宣布并初始化myHappyTreeMap

var myHappyTreeMap: Map<Int, Double> = mapOf()
Run Code Online (Sandbox Code Playgroud)

文件说,地图使用初始化mapOf()可序列化.如果文档说的那么......

mfu*_*n26 5

TreeMap和各种其他Map实现实现SerializableMap接口本身不扩展Serializable.

我看到一些选择:

  1. 确保类型myHappyTreeMap不单纯Map,但TreeMap还是一些其他的Map扩展/工具亚型Serializable.例如:

    val myHappyTreeMap: TreeMap = ...
    
    Run Code Online (Sandbox Code Playgroud)
  2. 你要把你的Map实例为Serializable(只推荐,如果你知道Map实例类型实现Serializable,否则你会得到一个ClassCastException).例如:

    bundle.putSerializable("myHappyKey", myHappyTreeMap as Serializable)
    
    Run Code Online (Sandbox Code Playgroud)
  3. 检查您的Map实例,如果不是Serializable,请使用Map实现来复制它.例如:

    bundle.putSerializable("myHappyKey", when (myHappyTreeMap) {
        is Serializable -> myHappyTreeMap
        else -> LinkedHashMap(myHappyTreeMap)
    })
    
    Run Code Online (Sandbox Code Playgroud)

  • 啊,文档(https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/map-of.html)说这些地图是可序列化的.在实践中,我发现它生成了LinkedHashMap.这在未来可能不是这样,但如果文档说`mapOf()`产生`Serializable`,那么可以安全地假设它是Just Work™. (3认同)