Kotlin 空检查期间可为空的弱哈希映射迭代


// I know activity is not ideal here due to lack of equality guaranty; please ignore this part
private val mActivities: WeakHashMap<Activity, Int> = WeakHashMap()
....
mActivities.put(null, null)
mActivities.filter { (backStackEntry: Activity?) ->
// Issue: this does not show any errors but fails at runtime
Logger.warn("$TAG - Activity ${backStackEntry.localClassName}")
val entry: Activity? = backStackEntry
// Works as expected: this does show the error as expected
Logger.warn("$TAG - Activity ${entry.localClassName}")
}

当我尝试遍历可能包含空值的弱哈希图时,Kotlin 空安全检查不起作用。上面列出的示例。关于为什么会发生这种情况的任何想法将不胜感激。谢谢!

澄清${backStackEntry?.localClassName}有效,但我担心的是为什么Android Studio或构建逻辑没有显示静态检查错误或${backStackEntry.localClassName}编译错误。但是在${entry.localClassName},Android Studio将此标记为错误。

WeakHashMap<Activity, Int>

类型不提供有关其内容可为空性的信息。

考虑将private val mActivities: WeakHashMap<Activity, Int> = WeakHashMap()替换为private val mActivities: MutableMap<Activity?, Int?> = WeakHashMap()

由于您显式指定了backStackEntry可空性,并且编译器仍然没有将取消引用backStackEntry标记为错误,因此它一定是一个错误,您应该在 youtrack.jetbrains.com/issues/KT 上报告它。

最新更新