什么都不做也不返回什么的方法的Java 8功能接口是什么?
即,是否等效于Action
带有void
返回类型的C#无参数?
什么都不做也不返回什么的方法的Java 8功能接口是什么?
即,是否等效于Action
带有void
返回类型的C#无参数?
Answers:
如果我正确理解的话,你想要一个具有方法的功能接口void m()
。在这种情况下,您只需使用即可Runnable
。
Runnable
带有@FunctionalInterface
(ii)注释,即使在lambda表达式的上下文中,它也将在线程上执行:运行lambda的线程可能是当前线程...
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仅允许方法抽象方法,因此您可以使用以下lambda表达式实例化该接口,并且可以访问该接口成员
@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
因为它符合功能接口的规范,并且可以使用lambda语法创建。为什么不创建自己的功能界面?参见Runnable,参见FunctionalInterface