JavaRush /จาวาบล็อก /Random-TH /รู้เบื้องต้นเกี่ยวกับอินเทอร์เฟซการทำงาน
minuteman
ระดับ

รู้เบื้องต้นเกี่ยวกับอินเทอร์เฟซการทำงาน

เผยแพร่ในกลุ่ม
กรุณาอย่าเกรียนมากเกินไป ฉันเพิ่งเริ่มแปลบทความ ข้อมูลเบื้องต้นเกี่ยวกับอินเทอร์เฟซการทำงาน - 1

ข้อมูลเบื้องต้นเกี่ยวกับอินเทอร์เฟซการทำงาน - แนวคิดที่สร้างขึ้นใหม่ใน Java 8

นักพัฒนา Java ทุกคนในโลกได้ใช้หนึ่งในอินเทอร์เฟซต่อไปนี้อย่างน้อยหนึ่งครั้ง: java.lang.Runnable, java.awt.event.ActionListener, java.util.Comparator, java.util.concurrent.Callable. พวกเขาทั้งหมดมีสิ่งหนึ่งที่เหมือนกัน และนั่นคือพวกเขาทั้งหมดมีเพียงวิธีเดียวเท่านั้น มีอินเทอร์เฟซดังกล่าวอื่นๆ อีกมากมายใน JDK รวมถึงอินเทอร์เฟซอื่นๆ ที่สร้างโดยนักพัฒนา Java อินเทอร์เฟซเหล่านี้เรียกอีกอย่างว่าSingle Abstract Method interfaces(อินเทอร์เฟซ SAM) หนึ่งในวิธีที่ได้รับความนิยมมากที่สุดในการใช้อินเทอร์เฟซเหล่านี้คือการสร้างคลาสภายในที่ไม่ระบุชื่อที่ใช้อินเทอร์เฟซเหล่านี้ ดังตัวอย่างต่อไปนี้:
public class AnonymousInnerClassTest {
    public static void main(String[] args) {
        new Thread(new Runnable() {
            @Override
            public void run() {
                System.out.println("A thread created and running...");
            }
        }).start();
    }
}
ใน Java 8 แนวคิด SAM จะถูกสร้างขึ้นใหม่และเรียกว่าอินเทอร์เฟซการทำงาน สามารถแสดงได้โดยใช้นิพจน์แลมบ์ดา การอ้างอิงเมธอด และตัวสร้างการอ้างอิง คำอธิบายประกอบ @FunctionalInterface ใหม่ได้ถูกสร้างขึ้นซึ่งใช้ในการส่งข้อผิดพลาดในระดับคอมไพเลอร์เมื่ออินเทอร์เฟซที่คุณใส่คำอธิบายประกอบไม่ทำงานในระดับการทำงาน มาดูอินเทอร์เฟซการทำงานที่เรียบง่ายด้วยวิธีนามธรรมวิธีเดียว:
@FunctionalInterface
public interface SimpleFunInterface {
    public void doWork();
}
อินเทอร์เฟซยังสามารถประกาศวิธีการเชิงนามธรรมจากคลาสได้java.lang.Objectแต่ในกรณีนี้ อินเทอร์เฟซยังสามารถประกาศได้ว่าใช้งานได้:
@FunctionalInterface
public interface SimpleFuncInterface {
    public void doWork();
    public String toString();
    public Boolean equals(Object o);
}
ทันทีที่คุณเพิ่มวิธีนามธรรมอื่นให้กับอินเทอร์เฟซ IDE จะทำเครื่องหมายว่ามีข้อผิดพลาดดังในภาพ: ข้อมูลเบื้องต้นเกี่ยวกับอินเทอร์เฟซการทำงาน - 2 อินเทอร์เฟซสามารถสืบทอดจากอินเทอร์เฟซอื่น หากอินเทอร์เฟซสืบทอดจากอินเทอร์เฟซที่ใช้งานได้และไม่มีวิธีนามธรรมใหม่ อินเทอร์เฟซนี้ก็ใช้งานได้เช่นกัน แต่อินเทอร์เฟซสามารถมีวิธีนามธรรมได้วิธีเดียวและวิธีการเริ่มต้นหลายวิธีเท่านั้น และจะยังคงถือว่าใช้งานได้
@FunctionalInterface
public interface ComplexFunctionalInterface extends SimpleFuncInterface {
    default public void doSomeWork() {
        System.out.println("Doing some work in interface impl...");
    }
    default public void doSomeWork() {
        System.out.println("Doing some other work in interface impl...");
    }
}
ตัวอย่างบนสุดยังคงเป็นอินเทอร์เฟซที่ใช้งานได้ ตอนนี้เรามาดูกันว่าเราจะใช้นิพจน์แลมบ์ดาเพื่อแทนที่คลาสภายในที่ไม่ระบุตัวตนเพื่อใช้อินเทอร์เฟซการทำงานได้อย่างไร:
/*
*Implementation the interface by creating an
*anonymoous inner class versus using
*lambda expression.
*/
public class SimpleFunInterfaceTest {
    public static void main(String[] args) {
        carryOutWork(new SimpleFunInterface() {
            @Override
            public void doWork() {
                System.out.println("Do work in SimpleFun impl...");
            }
        });
        carryOutWork(() -> System.out.println("Do work in lambda exp impl..."));
    }
    public static void carryOutWork(SimpleFuncInterface sfi) {
        sfi.work();
    }
}
ผลลัพธ์ของโปรแกรมจะเป็นดังนี้:
Do work in SimpleFun impl...
Do work in lambda exp impl...
ในกรณีที่คุณใช้ IDE ที่รองรับไวยากรณ์นิพจน์แลมบ์ดา Java (Netbeans 8 Nightly builds) – คุณจะได้รับคำแนะนำเมื่อใช้คลาสภายในที่ไม่ระบุชื่อ: ความรู้เบื้องต้นเกี่ยวกับอินเทอร์เฟซการทำงาน - 3 นี่เป็นการแนะนำโดยย่อเกี่ยวกับแนวคิดของอินเทอร์เฟซการทำงานใน Java 8 และวิธีการนำไปใช้งาน โดยใช้นิพจน์แลมบ์ดา
ความคิดเห็น
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION