概念
函数式接口,即适用于函数式编程场景的接口。而java中的函数式编程体现就是Lambda,所以函数式接口就是可以适用于Lambda使用的接口。只有确保接口中有且仅有一个抽象方法,Java中的Lambda才能顺利地进行推导。
代码示例
package liojx.kn.fnI; /** * 创建订单的接口 */ @FunctionalInterface // 表明这个接口属于函数式接口,一个接口中仅一个方法,当然静态方法、Object方法、default方法除外 public interface CreateOrder { /** * 创建订单信息 * @param info 创建订单的参数 * @return 返回订单信息 */ Order createOrder(String info); /** * 当我欲再创建一个抽象方法的时候, * @FunctionalInterface 会红色波浪线提示错误:Multiple non-overriding abstract methods * found in interface liojx.kn.fnI.CreateOrder * 意为:有多个非重写的抽象方法 * 注释 */ // Order getOrderById(Long id); /** * 而重写Object的toString方法是可以通过函数式接口验证的 * @return */ @Override String toString(); /** * default方法也可 * 每一个实现订单创建的接口,都可以获得,订单商品的统一商家 */ default String getFactory() { return "侏罗纪恐龙制造公司"; } /** * 静态方法也可以通过验证 * 每一个实现订单创建的接口,都可以获得订单商品销售总监的联系方式 */ static String getSalesmanPhone() { return "13888888888"; } }
常用的函数式接口
- Supplier
- Consumer
- Function
- Predicate
- UnaryOperator
- BinaryOperator
而这些重要的函数式接口,都定义在标准的rt.jar库里面。路径为:java.util.function。