JavaTutorial

函子

前面的课程中,我们学习了如何用异常来返回多个值,用异常处理错误,以及如何使用接口来抽象相似的对象。

在不同的代码之间只需要传递函数而不需要传递字段,例如c语言的qsort函数接受一个比较器函数指针。Java语言的函数必须依附在类或者对象上,传统的做法分为好几步:

  1. 定义一个接口,这个接口对应着函数的类型;
  2. 调用方实现这个接口,编写新的实现类;
  3. 在实现类里补充方法体;
  4. 创建相应的对象,将该对象填入函数参数或者对象的成员。

Java8提供了匿名类和函子(functor),这两个语法特性可以不写出第二步的类定义,而直接写出方法体,因此简化了以上的过程。

使用函子

函子可以作为某个接口的对象实例。

    someMethod((arg1)->{
        return arg1.ano();
    })

使用匿名类和函子对象

接受函子的函数,仍然需要第一步的接口定义。接口定义描述了传入函数的入参和出参,描述了入参和出参才能检查传入函数的类型。

定义接口时,要用到@FunctionalInterface元注解。