Android API33中Bundle.getSerializable废弃后的报错问题求助
在Android API33中,Bundle.getSerializable(String)方法被废弃,官方新增了Bundle.getSerializable(String, Class)方法,但直接传递Object.class或Map.class会触发编译错误——本质原因是Object类和Map接口本身并未实现Serializable接口,而新方法要求传入的Class必须是Serializable的子类。以下针对两个具体问题给出解决方法:
问题1:获取Object类型的序列化对象
原有代码
Object testObj= null; testObj = arguments.getSerializable("Sample Text");
错误修改尝试
Object testObj= null; testObj= arguments.getSerializable("this", Object.class);
报错信息
Error : 'getSerializable(java.lang.String, java.lang.Class)' in 'android.os.Bundle' cannot be applied to '(java.lang.String, java.lang.Class<java.lang.Object>)'
解决方法
直接传入Serializable.class,再将结果转为Object类型:
Object testObj = null; testObj = arguments.getSerializable("Sample Text", Serializable.class);
如果明确知道存入的是某个具体实现了Serializable的类(比如String、自定义实体类),也可以直接传入对应类的Class,避免强转更安全:
// 假设存入的是String类型 String testObj = arguments.getSerializable("Sample Text", String.class);
问题2:获取Map类型的序列化对象
原有代码
Map<String, Object> myArgs = (Map) bundle.getSerializable("Sample text");
错误修改尝试
Map<String, Object> myArgs = (Map) bundle.getSerializable("Sample text", Map.class);
报错信息
Error : 'getSerializable(java.lang.String, java.lang.Class)' in 'android.os.Bundle' cannot be applied to '(java.lang.String, java.lang.Class<java.util.Map>)'
解决方法
Map是接口且未实现Serializable,需要传入实现了Serializable的Map子类,比如Android中常用的HashMap.class:
Map<String, Object> myArgs = bundle.getSerializable("Sample text", HashMap.class);
如果不确定存入的具体Map实现类,也可以用Serializable.class强转:
Map<String, Object> myArgs = (Map<String, Object>) bundle.getSerializable("Sample text", Serializable.class);
内容的提问来源于stack exchange,提问作者HydTech

