[英]The lambda expression is unused
在使用 Android 的Switch
,我給它附加了一個setOnCheckedChangeListener
並收到了這個警告
未使用 lambda 表達式。 如果你的意思是一個塊,你可以使用'run {...}'
這是代碼片段:
switchAction.setOnCheckedChangeListener({
_, isChecked ->
{
preferences.userStatus = isChecked
switchToggleVisibility(isChecked)
if (isChecked) {
fetchStats()
getOrders()
} else {
releaseOrder()
}
}
})
使用run
確實修復了這個警告,但有人知道這背后的原因嗎? lambda 表達式如何未使用?
您將 Java 的 lambda 符號與 Kotlin 的 lambda 符號混合,創建一個 lambda,在這種情況下返回另一個嵌套的 lambda。 正確且慣用的語法如下所示:
switchAction.setOnCheckedChangeListener { _, isChecked ->
preferences.userStatus = isChecked
switchToggleVisibility(isChecked)
if (isChecked) {
fetchStats()
getOrders()
} else {
releaseOrder()
}
}
去掉所有的噪音,一個正常的 lambda 看起來像這樣:
{ arg1, arg2 -> returnValue } // Type: (A, B) -> C
你這樣做了:
{ arg1, arg2 -> { returnValue } } // Type: (A, B) -> (() -> C)
也可以這樣寫:
{ arg1, arg2 -> { -> returnValue } } // Type: (A, B) -> (() -> C)
這種表示法更清楚地表明 lambda 不返回返回值,而是返回另一個沒有返回返回值的參數的 lambda。
通常,這會被編譯器捕獲為錯誤的返回類型,但在您的情況下,不使用 lambda 的返回值。 因此,您只是在創建內部 lambda 而不返回或運行它,這就是您收到警告的原因。
是的,該
_, isChecked ->
{ ... }
必須改為
_, isChecked ->
preferences.userStatus = isChecked
switchToggleVisibility(isChecked)
if (isChecked) {
fetchStats()
getOrders()
} else {
releaseOrder()
}
因此,只需刪除花括號,否則您只會創建一個根本不執行的塊。 或者你也可以做
_, isChecked ->
run {
preferences.userStatus = isChecked
switchToggleVisibility(isChecked)
if (isChecked) {
fetchStats()
getOrders()
} else {
releaseOrder()
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.