在使用
Android的Switch时,我附加了一个setonCheckedchangelistener并得到了这个警告
The lambda expression is unused. If you mean a block,you can use ‘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 }
你这样做了:
{ arg1,arg2 -> { returnValue } }
哪个也可以这样写:
{ arg1,arg2 -> { -> returnValue } }
这种表示法使得lambda不返回返回值更加清楚,但返回另一个没有返回返回值的参数的lambda.
通常,这会被编译器捕获为错误的返回类型,但在您的情况下,不使用lambda的返回值.所以,你只是创建内部lambda而不返回或运行它,这就是你得到警告的原因.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。