如果我使用 avariable檢查布林值,則“!isNumber”會突出顯示,并帶有警告“條件'!isNumber'始終為真”:
val isNumber = bind.number.isChecked
when (array) {
"A" -> {
if (isNumber) {
return "number"
} else if (!isNumber) {
return "letter"
}
}
但是,如果我直接使用視圖來檢查布林值,則沒有警告:
when (acArray) {
"A" -> {
if (bind.number.isChecked) {
return "number"
} else if (!bind.number.isChecked) {
return "letter"
}
}
uj5u.com熱心網友回復:
您if已經在檢查 的true值,如果它的,isNumber您不需要顯式檢查塊,因為相反的就是您收到該警告的原因。isNumberelsefalsetruefalse
想象一下編譯器和你說話:
編譯器:
不要告訴我
else去檢查它false,因為我的if街區已經在檢查它是否true,讓我if做繁重的作業,讓我在變成else時才醒來,不用提醒我的窮人,讓他去......isNumberfalseelse
編輯:下面的示例場景,類 vs 本地 vs 頂級檔案范圍
兩者classLevelScope都會localLevelScope給你一個警告。
class MyClass {
val classLevelScope = false
fun function() {
if (classLevelScope) {
} else if (!classLevelScope) { // you'll get a warning here
}
}
}
class MyClass {
fun function() {
val localScope = false
if (localScope) {
} else if (!localScope) { // you'll get a warning here
}
}
}
但是頂級檔案范圍不會
var isChecked = false // top level file scope, inside MyClass.kt
class MyClass {
fun function() {
if (isChecked) {
} else if (!isChecked) { // No warning here
}
}
}
我對頂級作用域變數的假設是編譯器無法確定誰會在什么執行緒、類、類的實體或任何其他地方更改其值,因為頂級作用域變數可以在任何地方訪問,而classLevelScope不像localLevelScope. 您bind.number.isChecked可能是頂級范圍變數。
如果警告困擾您,您可以將其從 AS 設定中洗掉
檢查 -> Kotlin -> 可能的錯誤 -> 恒定條件 -> 取消選中該框

uj5u.com熱心網友回復:
那是因為如果 isNumber != true 比它總是錯誤的編輯你的代碼是這樣的:
when (array) {
"A" -> {
if (isNumber) {
return "number"
} else {
return "letter"
}
}
uj5u.com熱心網友回復:
在第二種情況下,它不會給您警告,因為當值不是來自區域變數時,兩個分支不一定是互斥的。其他一些執行緒可能會更改 if 檢查和 else-if 檢查之間的值。或者,另一個類中的屬性可能設定為在每次后續呼叫時回傳不同的值——編譯器不會檢查以排除模塊外類的行為的可能性。
在第一種情況下,您已將布林值復制到區域變數,因此編譯器可以很容易地看到該值不可能在 else-if 之前更改。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/520072.html
標籤:安卓科特林已检查
上一篇:找不到專案視圖
下一篇:滿足特定條件時如何僅回傳串列流?
