函數(shù)式接口@FunctionalInterface

什么是函數(shù)式接口

所謂的函數(shù)式接口,當(dāng)然首先是一個(gè)接口,然后就是在這個(gè)接口里面只能有一個(gè)抽象方法。

這種類型的接口也稱為SAM接口,即Single Abstract Method interfaces

特點(diǎn)

  • 接口有且僅有一個(gè)抽象方法
  • 允許定義靜態(tài)方法
  • 允許定義默認(rèn)方法
  • 允許java.lang.Object中的public方法
  • 該注解不是必須的,如果一個(gè)接口符合"函數(shù)式接口"定義,那么加不加該注解都沒有影響。加上該注解能夠更好地讓編譯器進(jìn)行檢查。如果編寫的不是函數(shù)式接口,但是加上了@FunctionInterface,那么編譯器會報(bào)錯(cuò)

例子

// 正確的函數(shù)式接口
@FunctionalInterface
public interface TestInterface {
 
    // 抽象方法
    public void sub();
 
    // java.lang.Object中的public方法
    public boolean equals(Object var1);
 
    // 默認(rèn)方法
    public default void defaultMethod(){
    
    }
 
    // 靜態(tài)方法
    public static void staticMethod(){
 
    }
}

// 錯(cuò)誤的函數(shù)式接口(有多個(gè)抽象方法)
@FunctionalInterface
public interface TestInterface2 {

    void add();
    
    void sub();
}

用法

  1. Runnable的用法
  2. 公司組內(nèi)的用法介紹
/**
 * 真正的業(yè)務(wù)處理
 */
@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, "系統(tǒng)異常"), response);
        
    }
}

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

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

JDK中的函數(shù)式接口舉例

java.lang.Runnable,

java.awt.event.ActionListener,

java.util.Comparator,

java.util.concurrent.Callable

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

相關(guān)文章

參考資料

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,711評論 19 139
  • 拿起,放下,放下,拿起。周而復(fù)始,反反復(fù)復(fù)。終于,鼓足勇氣,發(fā)了一句:能不能見見你?四十一分鐘過去了,可他依然沒有...
    魔梣木閱讀 300評論 0 0
  • 清翷 冬至蟾桂渡玉寒,昆侖山下蕭琴聲。 至今仍戀歡歌舞,江南蔭柳換一新。 去年七夕鵲橋雨,猶見情景憶象中。 高高明...
    清翷閱讀 215評論 1 4
  • 當(dāng)年少不更事,對人沒有任何戒心,所以曾經(jīng)約過見網(wǎng)友。 高考結(jié)束,在家百無聊賴。QQ盛行的時(shí)代,我申請了小號,去調(diào)戲...
    可痕倩閱讀 486評論 0 0
  • 這是一個(gè)記錄我筆下老薛一點(diǎn)一點(diǎn)變帥的圖片文集~第一次嘗試,已召喚了最高技能,能成這個(gè)樣子已經(jīng)好不容易了~ 順便安利...
    煢南閱讀 291評論 0 1

友情鏈接更多精彩內(nèi)容