Есть ли простой способ преобразовать лямбду в полное выражение?
Да, есть! Сначала поместите курсор на первую фигурную скобку
Position your cursor at this character
|
v
popup.setOnMenuItemClickListener {
when (it.itemId) {
R.id.MenuMoreAbout->{
requireActivity().openActivity<UIAbout>()
}
}
true // Why do I need add 'true'
}
, затем введите Alt + Enter ( Option + Enter для Mac), чтобы вызвать меню Quick Fix . Выберите Преобразовать в анонимную функцию . Это превратит код в следующее:
popup.setOnMenuItemClickListener(fun(it: MenuItem): Boolean {
when (it.itemId) {
R.id.MenuMoreAbout -> {
requireActivity().openActivity<UIAbout>()
}
}
return true
})
, что более понятно для новичка в синтаксисе Kotlin.
Как видно, ваше выражение true
было возвращаемым значениемлямбды. В Kotlin возвращаемое значение лямбды - это значение последнего выражения в лямбде. Если вы предпочитаете, вы можете сделать это явно, заменив
true // Why do I need add 'true'
на
return@setOnMenuItemClickListener true
в вашем исходном коде. См. Официальные документы для Return в Labels для получения дополнительной информации.
Причина, по которой должен быть возвращен Boolean
, заключается в том, что лямбда-код для следующего интерфейса Java является типом аргументана setOnMenuItemClickListener(OnMenuItemClickListener)
public interface OnMenuItemClickListener {
boolean onMenuItemClick(MenuItem item);
}
Как видите, onMenuItemClick(MenuItem)
возвращает boolean
(который конвертируется в Boolean
в Kotlin). Таким образом, лямбда также должна возвращать Boolean
.