我有以下代码:
DialogInterface.OnClickListener closeOnOkClickListener = new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
switch (which){
case DialogInterface.BUTTON_POSITIVE:
finish();
break;
}
}
};
我正在尝试将其转换为lambda表达式,但我无法做到。
有可能吗?
如何?
答案 0 :(得分:1)
有可能。每个仅有一种非默认方法的interface
都是FunctionalInterface
。注释仅用于编译器,以确保interface
仅获得一种非默认方法,否则,您将获得编译器错误。
尝试一下:
DialogInterface.OnClickListener closeOnOkClickListener = (dialog, which) -> {
switch (which){
case DialogInterface.BUTTON_POSITIVE:
finish();
break;
}
};
请查看this,以获取有关FunctionalInterface
批注的更多解释。
答案 1 :(得分:1)
有可能,只要接口只有一种(非默认)方法(针对您的情况)即可。
以下是lambda变体:
DialogInterface.OnClickListener closeOnOkClickListener = (dialog, which) -> {
switch (which) {
case DialogInterface.BUTTON_POSITIVE:
finish();
break;
}
};
请注意,由于您仅使用switch
种情况之一,因此您可以对代码进行一些改进:
DialogInterface.OnClickListener closeOnOkClickListener = (dialog, which) -> {
if (which.equals(DialogInterface.BUTTON_POSITIVE)) {
finish();
}
};
理想情况下,该界面应具有@FunctionalInterface
作为注释,以记录这种用法。