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

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

java 8中的功能接口如何工作

java 8中的功能接口如何工作

暮色呼如 2022-11-02 17:05:58
這是我在研究功能接口概念時遇到的一個示例。interface Sayable{     void say();  }  public class MethodReference {      public static void saySomething(){          System.out.println("Hello, this is static method.");      }      public static void main(String[] args) {          // Referring static method          Sayable sayable = MethodReference::saySomething;          // Calling interface method          sayable.say();      }  } 這是打印“你好,這是靜態方法”。在運行時輸出。我的問題是當我們調用 say() 方法時它是如何打印輸出的(未實現)
查看完整描述

2 回答

?
肥皂起泡泡

TA貢獻1829條經驗 獲得超6個贊

你可以這樣想方法引用:


Sayable sayable = new Sayable() {


    @Override

    void say() {

        // Grab the body of the method referenced by the method reference,

        // which is the following:

        System.out.println("Hello, this is static method.");

    }

}

方法引用是有效的,因為


目標類型是功能接口 Sayable(您試圖將結果存儲到Sayable類型中);和

方法引用的簽名saySomething()匹配功能接口方法say(),即參數和返回類型匹配1。

被稱為變量say()的實例的方法的實現等于方法引用所引用的方法的主體。Sayablesayable


所以就像 JB Nizet 在評論中所說的那樣,say()實際上已經實現了。

1一個小細節:“匹配”這個詞并不完全意味著“相等”。例如,如果saySomething()返回一個int,它仍然可以工作,盡管目標類型的唯一方法將返回類型定義為void。



查看完整回答
反對 回復 2022-11-02
?
眼眸繁星

TA貢獻1873條經驗 獲得超9個贊

基本上只有一個抽象方法的接口是功能接口。


如果要匿名創建接口對象并調用 MethodReference 的 saySomething()。正常情況下會是這樣。。


Sayable sayable = new Sayable() {

  @Override

    void say() {

       MethodReference::saySomething;  

    }

}

在功能接口的情況下,因為總是只有一種方法。您可以忽略 say() 和相關的大括號 - 這是由 lambdas 提供的。


所以你可以說。


Sayable sayable = MethodReference::saySomething;  

這僅適用于功能接口。不適用于具有多個抽象方法的接口。


查看完整回答
反對 回復 2022-11-02
  • 2 回答
  • 0 關注
  • 107 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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