没有参数和返回值的 Java8函数接口

对于一个不接受任何东西也不返回任何东西的方法,Java8函数接口是什么?

也就是说,相当于具有 void返回类型的 C # 无参数 Action

32278 次浏览

如果我理解正确的话,您想要一个具有 void m()方法的函数式接口。在这种情况下,您可以简单地使用 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();
    

}
}

产出:

i am log method:::lets do it.
i m1 method:::