我想对 OnCheckedChangeListener 使用 lambda 而不是匿名类。设置侦听器的原始代码工作正常,内容如下:mCheckBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton buttonView,boolean isChecked) { mCrime.setSolved(isChecked); }});我尝试通过执行以下操作将其更改为 lambda:mCheckBox.setOnCheckedChangeListener(l -> mCrime.setSolved(isChecked));但我收到来自 Android Studio 的错误消息:无法解析符号已检查。我原以为 lambda 会隐式解析 isChecked,即使 onCheckChanged 需要两个参数。我的理解有什么问题?
3 回答

弑天下
TA贡献1818条经验 获得超8个赞
你的语法是错误的。你所拥有的甚至不应该编译。用这个:
mCheckBox.setOnCheckedChangeListener((view, isChecked) -> mCrime.setSolved(isChecked));
前面的东西->
不代表侦听器,而是在该侦听器中传递的参数,在这种情况下是一个视图和一个布尔值。

萧十郎
TA贡献1815条经验 获得超13个赞
isChecked 只是一个参数名称,当您使用 lambdas 时它不存在,但是这里是正确的 lambda 和您的 onCheckChangeListener 的参数名称
mCheckBox.setOnCheckedChangeListener((CompoundButton.OnCheckedChangeListener) (buttonView, isChecked) -> mCrime.setSolved(isChecked));

慕码人2483693
TA贡献1860条经验 获得超9个赞
setOnCheckedChangeListener
有两个参数
CompoundButton buttonView, boolean isChecked
,所以 lambda 语句将是
mCheckBox.setOnCheckedChangeListener(buttonView, isChecked -> mCrime.setSolved(isChecked))
话虽如此,我对 Java lambdas 还不够熟悉,不知道它是否可以处理多个参数。
添加回答
举报
0/150
提交
取消