1

Functional接口简介

  • 什么是Functional接口?

    包含有单一抽象方法(Single Abstract Method)的接口就是Functional接口。简单来说,就是有且只有一个非default方法的接口。为什么default方法不被计算进去呢?原因也很简单,因为default方法是已经有了一个实现了啊,所以并不是抽象的。

  • 所有Functional接口都建议打上@FunctionalInterface注解。
    这样做有两个好处:

    1. 明确地表明了这个接口作用,告诉调用方,“我”可以作为lambda表达式使用。
    2. 借助编译器来提前暴露错误。比如,你原本想写一个Functional接口以便可以在lambda表达式中使用,但实际上这个接口却包含了一个以上的非default方法,这时编译器就会提示你,“小伙,你肯定弄错了什么,这不是Functional接口啊”。
  • 现实世界中的例子

    多线程中用于执行无返回结果的Runnable接口,只有一个run方法,很“简单”的嘛!

     @FunctionalInterface
     public interface Runnable {
         public abstract void run();
     }
  • 使用示例

    在主线程外异步地执行任务(使用lambda表达式):

     public static void main(String[] args) {
       new Thread(() -> System.out.println("Hello 彬哥!")).start();
     }

    一行代码还是做了不少事情的嘛:

    1. 创建了一个异步任务Runnable。纳尼?哪里?没错, 就是() -> System.out.println("Hello 彬哥!"),这是一个lambda表达式。
    2. 使用上面创建的任务,来构造了一个新的线程,new Thread()
    3. 启动了这个线程,start()
  • 小结
    只有一个抽象方法的接口是Functional接口,要打上@FunctionalInterface注解。

RobynLiu
118 声望3 粉丝

百年后,工程、技术早已古老,但我们的技艺扔将受到尊重。