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!