Kotlin - 如何使地图可序列化

j2e*_*nue 6 kotlin

我正在 android 中编程(但对于这个问题,它可能无关紧要)。我有一个定义如下的 kotlin 地图:

var filters: MutableMap<String, Any?>
Run Code Online (Sandbox Code Playgroud)

我需要将它传递到另一个屏幕(android 中的 Activity),为此我通常使它在 java 中可序列化。但在 kotlin 中,此数据结构不可序列化。让我们看看我想要做什么:

var b = Bundle()
b.putSerializable("myFilter",filters) //- this gives a compile error that filters is not serializable. 
Run Code Online (Sandbox Code Playgroud)

我尝试调用 filters.toMap() 但这也不起作用。这是如何在 kotlin 中完成的?我如何将地图发送到 android 中的另一个屏幕?

Jit*_*a A 10

使用 HashMap 代替 MutableMap。

该包需要一个 Serialiable 对象。MutableMap 是一个接口,因此不可序列化。HashMap 是一个实现可序列化的具体类。您可以使用任何实现可序列化的 Map 的具体子类

创建一个哈希图:

val filters: HashMap<String, Any?> = HashMap()
filters.put("a", 2)
Run Code Online (Sandbox Code Playgroud)

或者

val filters: HashMap<String, Any?> = hashMapOf("a" to 2)
Run Code Online (Sandbox Code Playgroud)

放入捆绑包:

val b = Bundle()
b.putSerializable("myFilter", filters)
Run Code Online (Sandbox Code Playgroud)