传递:
val intent = Intent(this, ImageCategoryActivity::class.java)
intent.putExtra("Images", netDiskData!!.imageMap)
startActivity(intent)
接收:
val imageData =
intent.getSerializableExtra("Images") as HashMap<String, ArrayList<ImageBean>>
ImageBean 是一个实体类,已经 Serializable 序列化
但是 AndroidStudio 会提示 Unchecked cast
Unchecked cast: Serializable! to kotlin.collections.HashMap<String, ArrayList<ImageBean> /* = ArrayList<ImageBean> */> /* = java.util.HashMap<String, ArrayList<ImageBean>> */
代码洁癖看着实在是烦人,搜了一圈,都是让 @SuppressWarnings("unchecked")
来解决编译器警告,但是并没有实际解决问题
你们有人遇到这种情况吗?是怎么解决的呢?谢谢谢谢
1
ZSeptember 2020-12-25 18:00:48 +08:00
这不就是一个编译器警告吗?
你把一个 Object 强制转为 一个 Map,不得告警吗。 还想怎么解决。 |
2
mxalbert1996 2020-12-25 18:01:39 +08:00 via Android
这种编译器不确定但你可以确定没问题的情况正是 Suppress 的用途(你应该用 Kotlin 的 @Suppress ),Kotlin 的标准库也是这么做的。
https://github.com/JetBrains/kotlin/blob/532124d9a17e6939046bd0ff9ef5699d21d2ed2d/libraries/stdlib/src/kotlin/util/Lazy.kt#L84 |
3
lixyz OP @mxalbert1996 明白了,多谢多谢,仔细想想,确实像你说的一样,要不然人家也不会平白无故搞个 Suppress 出来。。。是我钻牛角尖了
|
4
fromzero 2020-12-25 18:19:05 +08:00 via Android
是我的话我不会把 map 传到 intent 。最好把数据拍平,存到一个对象里。如果是拍不平非要用 map 就用 eventbus 之类的发送粘性事件来接收
|
6
fromzero 2020-12-25 18:43:57 +08:00 via Android
@lixyz intent 定位轻量数据,map 里如果只是几个数据那完全可以拍平。如果大量数据,比如你上面这种 map 里面还有 list list 里面可能又有嵌套的对象,可能几百个数据,你 debug 不出问题,不能保证所有手机没问题,每个手机 intent size
不一样。这序列化传起来就挺慢的,而且会出现你提出的这个类型问题。你得自己转类型。序列化之后编译器是无法知道类型的。强转这种复杂的结构就容易出错,所以最佳建议是只传输一个对象,并且里面尽量是基本数据类型字段。符合 intent 轻量数据定位 |