Kotlin对象比较注意的点是什么
导读:本文共1641字符,通常情况下阅读需要5分钟。同时您也可以点击右侧朗读,来听本文内容。按键盘←(左) →(右) 方向键可以翻页。
摘要: 背景现有一个StateFlow及其监听privatevalstateFlow=MutableStateFlow(kotlin.Pair<String,ArrayList<String>>("abc",ArrayList()))GlobalScope.launch{stateFlow.collect{//dosome... ...
目录
(为您整理了一些要点),点击可以直达。现有一个StateFlow及其监听
更新ArrayList并尝试emit
实际上,collect并不会被调用
MutableStateFlow真正的实现者是StateFlowImpl, emit方法代码如下:
查看value的set方法:
其中"if (oldState == newState) return true"因emit前后是同一个对象,导致条件为true,那么,如果emit前后不是同一个对象,即可解决这个问题?
emit时尝试以下代码:
实际上,上述代码仍旧不能解决问题,因为kotlin.Pair默认重写了equals方法,查看kotlin.Pair decompiled的Java文件
其中Intrinsics.areEqual代码如下:
故即使pair对象本身不一样,但由于kotlin默认重写了equals方法,而pair.first与pair.second是一样的,从而条件"if (oldState == newState) return true"成立
由于StateFlow源码无法修改且是特定场景需求,故无法将判断条件改为kotlin的"===";故使用android.util.Pair或者自定义java Pair class即可
Kotlin对象比较注意的点是什么的详细内容,希望对您有所帮助,信息来源于网络。