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

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

我們可以在接口內使用 lambda 表達式作為接口內的默認或靜態實現嗎?

我們可以在接口內使用 lambda 表達式作為接口內的默認或靜態實現嗎?

精慕HU 2023-07-19 16:03:39
我現在有一個奇怪的疑問,據我所知,為了使用 lambda 表達式,它應該是一個具有單一抽象方法的函數接口。現在的問題是我們可以在另一個接口中提供它的實現作為靜態或默認實現嗎?謝謝。
查看完整描述

1 回答

?
呼如林

TA貢獻1798條經驗 獲得超3個贊

您可以定義一個 lambda 表達式來表示一個A實例,無論您所處的上下文如何。它可以是靜態接口方法,也可以是默認接口方法。


@FunctionalInterface

interface A {

    void printMessage();

}

interface B {

    default void printMessage() {

        A a = () -> System.out.println("A implementation (1)");

        a.printMessage();

    }

}

interface C {

    static void printMessage() {

        A a = () -> System.out.println("A implementation (2)");

        a.printMessage();

    }

}

正如您可能已經注意到的,它并不是特別有用,因為這兩種方法都可以簡單地重寫為


System.out.println("...");

如果接口之間存在關系,則默認方法將為超級接口中定義的方法提供實現。靜態方法會導致編譯錯誤,因為它們無法覆蓋實例方法。


@FunctionalInterface

interface A {

    void printMessage();

}

interface B extends A {

    @Override

    default void printMessage() {

        A a = () -> System.out.println("A implementation (1)");

        a.printMessage();

    }

}

interface C extends A {

    // compilation error

    static void printMessage() {

        A a = () -> System.out.println("A implementation (2)");

        a.printMessage();

    }


查看完整回答
反對 回復 2023-07-19
  • 1 回答
  • 0 關注
  • 119 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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