函數語言程式設計 - 預設方法



Java 8 引入了一個新的介面預設方法實現的概念。新增此功能是為了向後相容性,以便可以使用舊介面來利用 Java 8 的 lambda 表示式功能。

例如,“List”或“Collection”介面沒有“forEach”方法宣告。因此,新增此方法只會破壞集合框架的實現。Java 8 引入預設方法,以便 List/Collection 介面可以具有 forEach 方法的預設實現,而實現這些介面的類無需實現相同的 forEach 方法。

語法

public interface vehicle {

   default void print() {
      System.out.println("I am a vehicle!");
   }
}

多個預設方法

在介面中使用預設函式時,有可能一個類實現兩個具有相同預設方法的介面。以下程式碼解釋瞭如何解決這種歧義。

public interface vehicle {

   default void print() {
      System.out.println("I am a vehicle!");
   }
}

public interface fourWheeler {

   default void print() {
      System.out.println("I am a four wheeler!");
   }
}

第一個解決方案是建立一個自己的方法來覆蓋預設實現。

public class car implements vehicle, fourWheeler {

   public void print() {
      System.out.println("I am a four wheeler car vehicle!");
   }
}

第二個解決方案是使用 super 呼叫指定介面的預設方法。

public class car implements vehicle, fourWheeler {

   default void print() {
      vehicle.super.print();
   }
}

靜態預設方法

從 Java 8 開始,介面也可以具有靜態輔助方法。

public interface vehicle {

   default void print() {
      System.out.println("I am a vehicle!");
   }
	
   static void blowHorn() {
      System.out.println("Blowing horn!!!");
   }
}

預設方法示例

使用您選擇的任何編輯器(例如,在 C:\> JAVA 中)建立以下 Java 程式。

Java8Tester.java

public class Java8Tester {

   public static void main(String args[]) {
      Vehicle vehicle = new Car();
      vehicle.print();
   }
}

interface Vehicle {

   default void print() {
      System.out.println("I am a vehicle!");
   }
	
   static void blowHorn() {
      System.out.println("Blowing horn!!!");
   }
}

interface FourWheeler {

   default void print() {
      System.out.println("I am a four wheeler!");
   }
}

class Car implements Vehicle, FourWheeler {

   public void print() {
      Vehicle.super.print();
      FourWheeler.super.print();
      Vehicle.blowHorn();
      System.out.println("I am a car!");
   }
}

驗證結果

使用 **javac** 編譯器編譯該類,如下所示:

C:\JAVA>javac Java8Tester.java

現在執行 Java8Tester,如下所示:

C:\JAVA>java Java8Tester

它應該產生以下輸出:

I am a vehicle!
I am a four wheeler!
Blowing horn!!!
I am a car!
廣告
© . All rights reserved.