【发布时间】:2021-09-23 22:39:47
【问题描述】:
这是我的非序列化类:
class Foo(val foo: String)
当我尝试将其作为参数时,它不会编译:
MainFragment().apply {
arguments = Bundle().apply {
val foo = Foo("foo!")
putSerializable("key", foo) // compile error
}
}
但是如果我把它放到一个 HashMap 中,那么我可以把 HashMap 作为一个参数:
MainFragment().apply {
arguments = Bundle().apply {
val foo = Foo("foo!")
val hashMap = hashMapOf("foo" to foo)
putSerializable("key", hashMap) // compile
}
}
当我在 Fragment 创建期间尝试从 HashMap 获取 Foo 实例时,我预计会出现类似 NotSerializableException 的错误,因为 Foo 类不可序列化,但它工作正常:
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
val hashMap = arguments?.getSerializable("key") as HashMap<String, Foo> // unchecked cast warning
Log.d(TAG, "${hashMap["foo"]?.foo}") // It works fine without an exception
}
并且它在配置更改期间仍然存在。为什么?
【问题讨论】:
标签: android serialization android-intent android-bundle