定义
函数式接口(Functional Interface)就是一个有且仅有一个抽象方法,但是可以有多个非抽象方法的接口。
语法:
@FunctionalInterface
public interface MyFunctionalInterface {
//抽象方法
void abstractMethod();
//默认方法
default void defaultMethod() {
//implement code
}
//静态方法
static void staticMethod() {
//implement code
}
//Object 中覆盖的方法,也就是 equals,toString,hashcode等方法。
@Override
boolean equals(Object obj); // java.lang.Object's public method
}
说明:
- 函数式接口里允许定义默认方法。 函数式接口里是可以包含默认方法,因为默认方法不是抽象方法,其有一个默认实现,所以是符合函数式接口的定义的;
- 函数式接口里允许定义静态方法。 函数式接口里是可以包含静态方法,因为静态方法不能是抽象方法,是一个已经实现了的方法,所以是符合函数式接口的定义的;
- 函数式接口里允许定义 java.lang.Object 里的 public 方法。函数式接口里是可以包含Object里的public方法,这些方法对于函数式接口来说,不被当成是抽象方法(虽然它们是抽象方法);因为任何一个函数式接口的实现,默认都继承了 Object 类,包含了来自 java.lang.Object 里对这些抽象方法的实现;
举个例子
//定义函数式接口
@FunctionalInterface
public interface MyFunction<T,F,R> {
R myFunction(T t,F f);
}
//实现接口
public class MyFunctionDemo {
public static void main(String[] args) {
MyFunction<Integer,Integer,Integer> add=(a,b)-> (a+b);
MyFunction<Integer,Integer,Integer> minus=(a,b)-> (a-b);
MyFunction<Integer,Integer,Integer> multiply=(a,b)-> (a/b);
MyFunction<Integer,Integer,Integer> divide=(a,b)-> (a*b);
System.out.println(calculate(add,1,4));
System.out.println(calculate(minus,6,4));
System.out.println(calculate(multiply,1,4));
System.out.println(calculate(divide,1,4));
}
public static Integer calculate(MyFunction<Integer,Integer,Integer> operation,Integer numberA,Integer numberB) {
return operation.myFunction(numberA,numberB);
}
}
//结果
5
2
0
4
网友评论