Giao diện chức năng Java 8 cho một phương thức không mất gì và không trả về gì?
Tức là, tương đương với C # không có tham số Action
với void
kiểu trả về?
Giao diện chức năng Java 8 cho một phương thức không mất gì và không trả về gì?
Tức là, tương đương với C # không có tham số Action
với void
kiểu trả về?
Câu trả lời:
Nếu tôi hiểu chính xác, bạn muốn có một giao diện chức năng với một phương thức void m()
. Trong trường hợp đó, bạn có thể chỉ cần sử dụng a Runnable
.
Runnable
được chú thích bằng @FunctionalInterface
và (ii) ngay cả trong ngữ cảnh của biểu thức lambda, nó sẽ được thực thi trên một luồng: luồng mà lambda đang chạy có thể là luồng hiện tại ...
Runnable
được sử dụng cho mục đích này, không chỉ để phân luồng ngữ cảnh.
Chỉ cần làm của riêng bạn
@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();
};
}
}
và sử dụng nó như thế này
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();
}
và đầu ra
HelloWorld
WorldHello
@F FunctionInterface chỉ cho phép phương thức trừu tượng do đó bạn có thể khởi tạo giao diện đó bằng biểu thức lambda như bên dưới và bạn có thể truy cập các thành viên giao diện
@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
Đặc tả giao diện của chỉ ra rằng nó là để cung cấp mã thực thi choThread
lớp. Đối với tôi, có vẻ không đúng khi sử dụngRunnable
nó ở nơi không dành cho việc thực thi bởi một luồng; có vẻ gây hiểu lầm.Runnable
được định nghĩa là aFunctionalInterface
vì nó đáp ứng đặc điểm kỹ thuật của giao diện chức năng và có thể được tạo bằng cú pháp lambda. Tại sao không tạo giao diện chức năng của riêng bạn? xem Runnable , xem FunctionInterface