อะไรคืออินเทอร์เฟซการทำงานของ Java 8 สำหรับวิธีการที่ไม่ใช้อะไรเลยและไม่ส่งคืนอะไรเลย
กล่าวคือเทียบเท่ากับ C # ที่ไม่มีพารามิเตอร์ที่Actionมีvoidชนิดส่งคืน?
อะไรคืออินเทอร์เฟซการทำงานของ Java 8 สำหรับวิธีการที่ไม่ใช้อะไรเลยและไม่ส่งคืนอะไรเลย
กล่าวคือเทียบเท่ากับ C # ที่ไม่มีพารามิเตอร์ที่Actionมีvoidชนิดส่งคืน?
คำตอบ:
void m()ถ้าผมเข้าใจอย่างถูกต้องคุณต้องการอินเตอร์เฟซที่ใช้งานได้กับวิธีการ ในกรณีนี้คุณสามารถใช้ไฟล์Runnable.
Runnableมีคำอธิบายประกอบ@FunctionalInterfaceและ (ii) แม้ในบริบทของนิพจน์แลมบ์ดามันจะถูกดำเนินการบนเธรด: เธรดที่แลมบ์ดารันซึ่งอาจเป็นเธรดปัจจุบัน ...
                    Runnableมีจุดประสงค์เพื่อใช้เพื่อจุดประสงค์นี้ไม่ใช่เฉพาะกับบริบทของเธรด
                    เพียงแค่ทำของคุณเอง
@FunctionalInterface
public interface Procedure {
    void run();
    default Procedure andThen(Procedure after){
        return () -> {
            this.run();
            after.run();
        };
    }
    default Procedure compose(Procedure before){
        return () -> {
            before.run();
            this.run();
        };
    }
}และใช้แบบนี้
public static void main(String[] args){
    Procedure procedure1 = () -> System.out.print("Hello");
    Procedure procedure2 = () -> System.out.print("World");
    procedure1.andThen(procedure2).run();
    System.out.println();
    procedure1.compose(procedure2).run();
}และผลลัพธ์
HelloWorld
WorldHello@FunctionalInterface อนุญาตเฉพาะเมธอดนามธรรมดังนั้นคุณสามารถอินสแตนซ์อินเทอร์เฟซนั้นด้วยนิพจน์แลมบ์ดาดังต่อไปนี้และคุณสามารถเข้าถึงสมาชิกอินเทอร์เฟซได้
        @FunctionalInterface
        interface Hai {
            void m2();
            static void m1() {
                System.out.println("i m1 method:::");
            }
            default void log(String str) {
                System.out.println("i am log method:::" + str);
            }
        }
    public class Hello {
        public static void main(String[] args) {
            Hai hai = () -> {};
            hai.log("lets do it.");
            Hai.m1();
        }
    }
output:
i am log method:::lets do it.
i m1 method:::
Runnableข้อกำหนดอินเทอร์เฟซของอินเทอร์เฟซระบุว่าเป็นการจัดเตรียมโค้ดปฏิบัติการให้กับThreadคลาส ดูเหมือนจะไม่ถูกต้องสำหรับฉันที่จะใช้ในRunnableที่ที่ไม่ได้มีไว้สำหรับการดำเนินการโดยเธรด ดูเหมือนจะทำให้เข้าใจผิดRunnableถูกกำหนดให้เป็นFunctionalInterfaceเนื่องจากเป็นไปตามข้อกำหนดของอินเทอร์เฟซที่ใช้งานได้และสามารถสร้างได้โดยใช้ไวยากรณ์แลมบ์ดา ทำไมไม่สร้างอินเทอร์เฟซการทำงานของคุณเอง ดูRunnableดูFunctionalInterface