FunctionalInterface 的作用这里不再过多介绍,不清楚的朋友可以百度出一大堆,这里直接上用法实操,理解函数式接口的强大
1、定义一个 函数式接口
@FunctionalInterface
public interface Reader {
// 函数式接口中,只能且必须有一个接口定义
void read(String name);
}
2、使用 函数式接口,按照执行步骤详细阅读注释
public class Func {
// 函数式接口对象
private Reader reader;
public static void main(String[] args) {
Func f = new Func();
f.test1(); // 执行顺序第一步
f.test2(); // 执行顺序第三步
}
public void test1() {
// 执行顺序第二步,给reader赋值,这个时候直接跳过接口实现代码块
reader = (name) -> {
// 执行顺序第五步,上一步赋值完成后,代码会跳转到这里执行接口实现的业务逻辑
// 和我们平常写的普通按代码顺序执行的方法是不是不一样?是不是感觉很牛X?使用这个装13嫌疑很大啊,哈哈
System.err.println(name);
};
}
public void test2() {
// 执行顺序第四步,给函数式接口参数赋值
reader.read("张三");
}
}
3、使用场景
适用于某一特定场景,但是要执行不同的代码逻辑。
例如:netty 接收数据。
比如 服务支持 WebSocket、gRPC、TCP、UDP协议。我们客户端连接上来的时候已经知道连接协议的,在channel连接上的方法channelActive()处使用 reader = (msg) ->{},然后在接收具体消息的方法channelRead0()处使用reader.read(msg)。这样写感觉很厉害的样子,让你代码更看不懂了,事实确是可以减少很多重复实现channelRead0的代码。