函数式接口@FunctionalInterface

什么是函数式接口

所谓的函数式接口,当然首先是一个接口,然后就是在这个接口里面只能有一个抽象方法。

这种类型的接口也称为SAM接口,即Single Abstract Method interfaces

特点

  • 接口有且仅有一个抽象方法
  • 允许定义静态方法
  • 允许定义默认方法
  • 允许java.lang.Object中的public方法
  • 该注解不是必须的,如果一个接口符合"函数式接口"定义,那么加不加该注解都没有影响。加上该注解能够更好地让编译器进行检查。如果编写的不是函数式接口,但是加上了@FunctionInterface,那么编译器会报错

例子

// 正确的函数式接口
@FunctionalInterface
public interface TestInterface {
 
    // 抽象方法
    public void sub();
 
    // java.lang.Object中的public方法
    public boolean equals(Object var1);
 
    // 默认方法
    public default void defaultMethod(){
    
    }
 
    // 静态方法
    public static void staticMethod(){
 
    }
}

// 错误的函数式接口(有多个抽象方法)
@FunctionalInterface
public interface TestInterface2 {

    void add();
    
    void sub();
}

用法

  1. Runnable的用法
  2. 公司组内的用法介绍
/**
 * 真正的业务处理
 */
@FunctionalInterface
public static interface RequestExecutor {
    Object doExecute() throws BusinessException;
}

/**
 * 请求模板
 */
public void templateRequest(RequestExecutor executor) {
    // 获取response对象
    HttpServletResponse response =
        ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getResponse();
    
    try {
        
        Object result = executor.doExecute();
        writeAjaxJSONResponse(ResultMessageBuilder.build(true, "success!", result), response);
        
    } catch (Exception e) {
    
        logger.error("请求失败", e);
        writeAjaxJSONResponse(ResultMessageBuilder.build(false, 500, "系统异常"), response);
        
    }
}

/**
 * controller部分代码
 */
@PostMapping(path = "/pageQuery")
public void pageQuery(@RequestBody Query query) {
    templateRequest(() -> service.pageQuery(query));
}

/**
 * service部分代码
 */
public PagedResult<VO> pageQuery(Query query);

JDK中的函数式接口举例

java.lang.Runnable,

java.awt.event.ActionListener,

java.util.Comparator,

java.util.concurrent.Callable

java.util.function包下的接口,如Consumer、Predicate、Supplier等

相关文章

参考资料

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 118,225评论 14 132
  • 拿起,放下,放下,拿起。周而复始,反反复复。终于,鼓足勇气,发了一句:能不能见见你?四十一分钟过去了,可他依然没有...
    魔梣木阅读 82评论 0 0
  • 清翷 冬至蟾桂渡玉寒,昆仑山下萧琴声。 至今仍恋欢歌舞,江南荫柳换一新。 去年七夕鹊桥雨,犹见情景忆象中。 高高明...
    清翷阅读 64评论 1 4
  • 当年少不更事,对人没有任何戒心,所以曾经约过见网友。 高考结束,在家百无聊赖。QQ盛行的时代,我申请了小号,去调戏...
    可痕倩阅读 152评论 0 0
  • 这是一个记录我笔下老薛一点一点变帅的图片文集~第一次尝试,已召唤了最高技能,能成这个样子已经好不容易了~ 顺便安利...
    茕南阅读 93评论 0 1