为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

神不在的星期二 2022-11-30 16:33:12
我有以下代码:DialogInterface.OnClickListener closeOnOkClickListener = new DialogInterface.OnClickListener() {        @Override        public void onClick(DialogInterface dialog, int which) {            switch (which){                case DialogInterface.BUTTON_POSITIVE:                    finish();                    break;            }        }    };我正在尝试将其转换为 lambda 表达式,但我做不到。可能吗?
查看完整描述

2 回答

?
侃侃无极

TA贡献2051条经验 获得超10个赞

有可能的。每个interface只有一个非默认方法的是一个FunctionalInterface. 该注释仅供编译器确保interface刚刚获得一个非默认方法,否则会出现编译错误。


尝试这个:


DialogInterface.OnClickListener closeOnOkClickListener = (dialog, which) -> {

    switch (which){

        case DialogInterface.BUTTON_POSITIVE:

            finish();

            break;

    }

};

检查这个FunctionalInterface以获得注释的更大解释。


查看完整回答
反对 回复 2022-11-30
?
慕的地10843

TA贡献1785条经验 获得超8个赞

解释

只要接口只有一种(非默认)方法,就您的情况而言,这是可能的。


这是 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注释来记录这种用法。


查看完整回答
反对 回复 2022-11-30
  • 2 回答
  • 0 关注
  • 81 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信