อะไรคืออินเทอร์เฟซการทำงานของ 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