亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在這種情況下是否可以使用 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 關注
  • 116 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號