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

我有以下代码:


DialogInterface.OnClickListener closeOnOkClickListener = new DialogInterface.OnClickListener() {

        @Override

        public void onClick(DialogInterface dialog, int which) {

            switch (which){

                case DialogInterface.BUTTON_POSITIVE:

                    finish();

                    break;

            }

        }

    };

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


可能吗?


神不在的星期二
浏览 86回答 2
2回答

侃侃无极

有可能的。每个interface只有一个非默认方法的是一个FunctionalInterface. 该注释仅供编译器确保interface刚刚获得一个非默认方法,否则会出现编译错误。尝试这个:DialogInterface.OnClickListener closeOnOkClickListener = (dialog, which) -> {    switch (which){        case DialogInterface.BUTTON_POSITIVE:            finish();            break;    }};检查这个FunctionalInterface以获得注释的更大解释。

慕的地10843

解释只要接口只有一种(非默认)方法,就您的情况而言,这是可能的。这是 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注释来记录这种用法。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java