Java 8 - วิธีการเริ่มต้น

Java 8 นำเสนอแนวคิดใหม่ของการใช้วิธีการเริ่มต้นในอินเทอร์เฟซ ความสามารถนี้ถูกเพิ่มสำหรับความเข้ากันได้แบบย้อนหลังเพื่อให้สามารถใช้อินเทอร์เฟซเก่าเพื่อใช้ประโยชน์จากความสามารถในการแสดงออกของแลมบ์ดาของ Java 8

ตัวอย่างเช่นอินเทอร์เฟซ 'List' หรือ 'Collection' ไม่มีการประกาศเมธอด 'forEach' ดังนั้นการเพิ่มวิธีการดังกล่าวจะทำลายการใช้งานกรอบการรวบรวม Java 8 แนะนำวิธีการเริ่มต้นเพื่อให้อินเตอร์เฟส List / Collection สามารถมีการใช้งานดีฟอลต์สำหรับแต่ละเมธอดและคลาสที่ใช้อินเทอร์เฟซเหล่านี้ไม่จำเป็นต้องใช้แบบเดียวกัน

ไวยากรณ์

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 {

   public 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!!!");
   }
}

ตัวอย่างวิธีการเริ่มต้น

สร้างโปรแกรม Java ต่อไปนี้โดยใช้โปรแกรมแก้ไขที่คุณเลือกใน C: \> 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!