目录
1.函数式接口基础概念
一个接口中,要求实现类实现的抽象方法有且只有一个,这样的接口称为函数式接口,上Demo:
//接口中有且只有一个实现类必须实现的方法,是函数式接口
interface test1{
void test();
}
//接口中有两个实现类必须实现的方法,非函数式接口
interface test2{
void test1();
void test2();
}
//接口中没有实现类必须实现的方法,非函数式接口
interface test3{
}
//接口中虽然没有方法,但可以从父接口继承到一个抽象方法,是函数式接口
interface test4 extends test1{
}
//接口中虽然有两个方法,但被default定义过的方法是不需要子类实现的,所以这个接口需要实现类实现的抽象方法只有test5()一个,是函数式接口
interface test5{
void test5();
default void test(){}
}
//接口中虽然有两个方法,但toString()可以从父类Object继承,实现类在实现此接口时此方法可以不重写,所以这个接口需要实现类实现的抽象方法只有test6()一个,是函数式接口
interface test6{
void test6();
String toString();
}
//接口中只有一个方法,toString()可以从父类Object继承,实现类实现该接口时可以重写也可以不重写,那么此接口就不是函数式接口
interface test7{
String toString();
}
//此接口中有四个方法,test8()为实现类必须重写的方法,test9()有默认实现无需重写,test10()静态方法无需重写,toString()从Object继承可重写也可不重写,所以实现类必须重写的方法只有test8()一个,是函数式接口
interface test8{
void test8();
default void test9(){}
static void test10(){}
String toString();
}
2.Java内置四大核心函数式接口
函数式接口 | 参数类型 | 返回类型 | 用途 |
---|---|---|---|
Consumer | T | void | 对类型T参数操作,无返回结果,包含方法 void accept(T t) |
Supplier | 无 | T | 返回T类型参数,方法时 T get() |
Function | T | R | 对类型T参数操作,返回R类型参数,包含方法 R apply(T t) |
Predicate | T | boolean | 断言型接口,对类型T进行条件筛选操作,返回boolean,包含方法 boolean test(T t) |
Consumer<T>:消费型接口(void accept(T t))
特点:有参数,无返回值类型的接口
Supplier<T> 供给型接口(T get())
特点:无参数,无返回值的接口
Function<T, R>:函数型接口(R apply(T t))
特点:方法的参数是函数
Predicate<T>:断言型接口(boolean test(T t))
特点:输入一个参数,输出一个boolean类型的返回值。
3.@FunctionalInterface
作用:写在接口之前,可以判断当前接口是否为函数式接口,如果不是函数式接口则会报错,功能类似于@Override判断是否为重写。