在Kotlin中可串行化

在我的Android应用程序中,我有一个TreeMap ,我可以愉快地把它放入一个Bundle

 bundle.putSerializable("myHappyKey", myHappyTreeMap); 

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

我如何处理这个?

编辑警告似乎消失,如果我把我的地图映射到一个Serializable 。 这是这样吗?

编辑2我宣布和初始化myHappyTreeMap

 var myHappyTreeMap: Map<Int, Double> = mapOf() 

该文件说,使用mapOf()初始化的mapOf()是可序列化的。 如果文档说的这样…

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

我看到一些选择:

  1. 确保myHappyTreeMap的类型不是简单的Map而是TreeMap或其他扩展/实现Serializable Map子类型。 例如:

     val myHappyTreeMap: TreeMap = ... 
  2. 将您的Map实例转换为Serializable (只有当您知道 Map实例类型实现了Serializable时才推荐使用,否则您将得到ClassCastException )。 例如:

     bundle.putSerializable("myHappyKey", myHappyTreeMap as Serializable) 
  3. 检查你的Map实例,如果它不是Serializable ,那么使用一个Map实现来复制它。 例如:

     bundle.putSerializable("myHappyKey", when (myHappyTreeMap) { is Serializable -> myHappyTreeMap else -> LinkedHashMap(myHappyTreeMap) })