You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android SDK33下如何用.getSerializable()反序列化为HashMap<Int,Int>

解决SDK 33下HashMap<Int, Int>的Serializable读取问题

针对SDK 33升级后getSerializable API的变化,以及泛型类字面量无法使用的问题,给你三个可行的解决办法:

方法一:原始类型强转+抑制警告

利用Java泛型擦除的特性,直接传入HashMap::class.java后强转为目标泛型类型,同时添加注解消除IDE警告:

@Suppress("UNCHECKED_CAST")
val data = savedInstanceState.getSerializable("answer", HashMap::class.java) as HashMap<Int, Int>

这种方法最简单直接,不需要额外依赖或自定义类,适合简单的泛型集合场景。

方法二:自定义泛型HashMap子类

创建一个指定泛型的HashMap子类,这样就能直接使用类字面量调用新API,完全避免强转:

// 定义自定义子类
class IntIntHashMap : HashMap<Int, Int>()

// 存储时存入IntIntHashMap实例
savedInstanceState.putSerializable("answer", IntIntHashMap().apply {
    put(1, 100)
    put(2, 200)
})

// 读取时直接调用API
val data = savedInstanceState.getSerializable("answer", IntIntHashMap::class.java)!!

这种方法类型安全性最高,适合需要频繁使用该泛型HashMap的场景。

方法三:借助Gson序列化/反序列化(依赖Gson库)

如果项目中已经引入Gson,可以通过将Serializable对象转成Json字符串,再解析为目标泛型类型,绕过类字面量的限制:

val serializable = savedInstanceState.getSerializable("answer")
val gson = Gson()
val data = gson.fromJson(gson.toJson(serializable), object : TypeToken<HashMap<Int, Int>>() {}.type)

这种方法适合复杂泛型结构的场景,但会引入序列化开销,简单场景不推荐。

内容的提问来源于stack exchange,提问作者codegsaini

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 02:24:14