Lambda表達式和函數式接口


試問怎么調用接口中的抽象函數

方法一:寫一個類實現接口中的抽象方法,然后創建這個類的對象調用該類重寫后的方法。

方法二:使用匿名內部類創建匿名內部類的對象。

        // 匿名內部類實現重寫接口的抽象方法
        new test03() {
            @Override
            public void name() {
                // TODO Auto-generated method stub
            }
        };

匿名內部類的出現簡化代碼。lamdba表達式的出現有進一步的簡化了匿名內部類的代碼  

public class Dome01 {
    public static void main(String[] args) {
        //分別使用匿名內部類和lamdba表達式
        TestInterface testInterface = new TestInterface() {
            @Override
            public void print() {
                System.out.println("我愛java");
            }
        };
        testInterface.print();
        
        //lamdba 
        TestInterface testInterface2 = () ->{System.out.println("我愛java");};
        testInterface2.print();
    }

}

interface TestInterface { // 定義一個接口
    void print();
}

lamdba表達式的標准格式

Lambda 省去面向對象的條條框框,格式由 3 個部分 組成:
  • 一些參數
  • 一個箭頭
  • 一段代碼
Lambda 表達式的 標准格式 為:
(參數類型 參數名稱) ‐> { 代碼語句 }
格式說明:
  • 小括號內的語法與傳統方法參數列表一致:無參數則留空;多個參數則用逗號分隔。
  • -> 是新引入的語法格式,代表指向動作。
  • 大括號內的語法與傳統方法體要求基本一致。

 函數式接口

函數式接口在Java中是指: 有且僅有一個抽象方法的接口。
函數式接口,即適用於函數式編程場景的接口。而Java中的函數式編程體現就是Lambda,所以函數式接口就是可
以適用於Lambda使用的接口。只有確保接口中有且僅有一個抽象方法,Java中的Lambda才能順利地進行推導。
格式:
只要確保接口中有且僅有一個抽象方法即可:
修飾符 interface 接口名稱 {
     public abstract 返回值類型 方法名稱(可選參數信息); // 其他非抽象方法內容
}
由於接口當中抽象方法的 public abstract 是可以省略的,所以定義一個函數式接口很簡單:
public interface MyFunctionalInterface { void myMethod(); }
FunctionalInterface注解:
與 @Override 注解的作用類似,Java 8中專門為函數式接口引入了一個新的注解: @FunctionalInterface 。該注 解可用於一個接口的定義上:
@FunctionalInterface
public interface MyFunctionalInterface {
      void myMethod();
  }
一旦使用該注解來定義接口,編譯器將會強制檢查該接口是否確實有且僅有一個抽象方法,否則將會報錯。不過,即使不使用該注解,只要滿足函數式接口的定義,這仍然是一個函數式接口,使用起來都一樣。
個人學習,內容簡略


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM