Functional
接口简介
- 什么是
Functional
接口?包含有单一抽象方法(
Single Abstract Method
)的接口就是Functional
接口。简单来说,就是有且只有一个非default方法
的接口。为什么default方法
不被计算进去呢?原因也很简单,因为default方法
是已经有了一个实现了啊,所以并不是抽象的。 -
所有
Functional
接口都建议打上@FunctionalInterface
注解。
这样做有两个好处:- 明确地表明了这个接口作用,告诉调用方,“我”可以作为
lambda表达式
使用。 - 借助编译器来提前暴露错误。比如,你原本想写一个
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(); }
一行代码还是做了不少事情的嘛:
- 创建了一个异步任务
Runnable
。纳尼?哪里?没错, 就是() -> System.out.println("Hello 彬哥!")
,这是一个lambda表达式。 - 使用上面创建的任务,来构造了一个新的线程,
new Thread()
。 - 启动了这个线程,
start()
。
- 创建了一个异步任务
- 小结
只有一个抽象方法的接口是Functional
接口,要打上@FunctionalInterface
注解。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。