在这种情况下(一个方法接口)可以使用lambda吗?

时间:2019-05-17 09:30:46

标签: java lambda

我有以下代码:

DialogInterface.OnClickListener closeOnOkClickListener = new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
            switch (which){
                case DialogInterface.BUTTON_POSITIVE:
                    finish();
                    break;
            }
        }
    };

我正在尝试将其转换为lambda表达式,但我无法做到。

有可能吗?

如何?

2 个答案:

答案 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作为注释,以记录这种用法。