函数式接口:是只有一个抽象方法,可以有多个非抽象方法的接口。
函数式接口有它自己的实例对象,创建它的实力对象的方法有三种
1.lambda表达式:如HelloService helloService = hi -> System.out.println("halo")
2.方法的引用
3.构造器引用
函数式接口一般会用到注解@FunctionalInterface,但是对于编译器来讲,即便没有这个注解,只要满足函数式接口的要求,编译器仍会认为它还是函数式接口。
第一类函数式接口:Function:
在java.util.function中这类函数式接口的数量是最多的。它的目的是接收一个参数,并返回一个结果。
它有4个方法:apply方法,compose方法,addThen方法,以及identity方法。其中最基础的方法是apply方法,后面三个方法的使用需要调用到它。apply方法的目的是把函数运用到指定的参数,然后返回一个结果。
第二类:Consumer:
它代表一种操作,和其他函数式接口不一样的地方是,它是通过副作用来操作传给它的参数。
它有2个方法:accept方法和addThen方法。要注意第一个方法的返回值是void,因为它是通过副作用来操作传给这个方法的参数的。addThen是一个组合式的Consumer
第三类:Predicate:
这类接口的作用是对一个参数的布尔判断。它会返回一个boolean的值。它有test方法,and方法,or方法,iSEequal方法等。其中最主要的方法就是test方法,后面的几个方法都会使用这个方法。
以上就是使用的比较多的函数式接口。这些函数式接口在java8新特性Stream中会被用到。在以后讲Stream的文章中提到。
一路总结下来,发现这些内容还是不难理解的。接下来要继续坚持让技术知识和思想变得容易理解和运用。