只是fyi,这是我在StackOverflow上的第一个问题,我在Kotlin中真的很新。
在完成一个完全是Kotlin的项目(版本1.1.3-2)时,我看到以下代码的警告(带有好奇小伙伴的评论):
// Code below is to handle presses of Volume up or Volume down.
// Without this, after pressing volume buttons, the navigation bar will
// show up and won't hide
val decorView = window.decorView
decorView
.setOnSystemUiVisibilityChangeListener { visibility ->
if (visibility and View.SYSTEM_UI_FLAG_FULLSCREEN === 0) {
decorView.systemUiVisibility = flags
}
}
警告是针对可见性和View.SYSTEM_UI_FLAG_FULLSCREEN === 0 ,并且它表示不推荐使用Int和Int类型的参数的标识相等。
我应该如何更改代码?为什么它首先被弃用(出于知识的缘故)?
答案 0 :(得分:9)
您可以使用structual equality更改代码,如下所示:
// use structual equality instead ---v
if (visibility and View.SYSTEM_UI_FLAG_FULLSCREEN == 0) {
decorView.systemUiVisibility = flags
}
为什么不建议使用referential equality?你可以看到我的答案here。
另一方面,当您使用referential/identity equality时,可能会返回false
,例如:
val ranged = arrayListOf(127, 127)
println(ranged[0] === ranged[1]) // true
println(ranged[0] == ranged[1]) // true
val exclusive = arrayListOf(128, 128)
// v--- print `false` here
println(exclusive[0] === exclusive[1]) // false
println(exclusive[0] == exclusive[1]) // true