Java的函數(shù)式接口@FunctionalInterface的使用說明
Java的函數(shù)式接口@FunctionalInterface
我們常用的一些接口Callable、Runnable、Comparator等在JDK8中都添加了@FunctionalInterface注解。


通過JDK8源碼javadoc,可以知道這個(gè)注解有以下特點(diǎn):
1、該注解只能標(biāo)記在"有且僅有一個(gè)抽象方法"的接口上。
2、JDK8接口中的靜態(tài)方法和默認(rèn)方法,都不算是抽象方法。
3、接口默認(rèn)繼承java.lang.Object,所以如果接口顯示聲明覆蓋了Object中方法,那么也不算抽象方法。
4、該注解不是必須的,如果一個(gè)接口符合"函數(shù)式接口"定義,那么加不加該注解都沒有影響。加上該注解能夠更好地讓編譯器進(jìn)行檢查。如果編寫的不是函數(shù)式接口,但是加上了@FunctionInterface,那么編譯器會報(bào)錯(cuò)。
@FunctionalInterface標(biāo)記在接口上,“函數(shù)式接口”是指僅僅只包含一個(gè)抽象方法的接口。

如果一個(gè)接口中包含不止一個(gè)抽象方法,那么不能使用@FunctionalInterface,編譯會報(bào)錯(cuò)。

比如下面這個(gè)接口就是一個(gè)正確的函數(shù)式接口:
// 正確的函數(shù)式接口
@FunctionalInterface
public interface TestInterface {
// 抽象方法
public void sub();
// java.lang.Object中的方法不是抽象方法
public boolean equals(Object var1);
// default不是抽象方法
public default void defaultMethod(){
}
// static不是抽象方法
public static void staticMethod(){
}
}到此這篇關(guān)于Java的函數(shù)式接口@FunctionalInterface的使用說明的文章就介紹到這了,更多相關(guān)@FunctionalInterface函數(shù)式接口內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
IDEA實(shí)現(xiàn)Maven項(xiàng)目創(chuàng)建并連接Tomcat方式
Maven是一款由Apache開發(fā)的項(xiàng)目管理工具,主要用于Java項(xiàng)目的構(gòu)建和依賴管理,它通過pom.xml文件自動管理項(xiàng)目依賴的jar包,簡化了項(xiàng)目構(gòu)建過程,Maven支持項(xiàng)目從編寫源代碼到編譯、測試、打包、部署的全過程管理,其依賴管理功能免去了手動添加jar包的麻煩2024-10-10
Spring Boot結(jié)合ECharts案例演示示例
本文主要主要介紹了Spring Boot結(jié)合ECharts案例演示示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-06-06
Spring中的HandlerMapping執(zhí)行流程詳解
這篇文章主要介紹了Spring中的HandlerMapping執(zhí)行流程詳解,HandlerMapping在Spring MVC框架的jar包下面,他是處理映射器,為用戶發(fā)送的請求找到合適的Handler Adapter,它將會把請求映射為HandlerExecutionChain對象,需要的朋友可以參考下2023-08-08
深入了解Spring中的@Autowired和@Resource注解
Spring中的@Autowired和@Resource注解都可以實(shí)現(xiàn)依賴注入,但使用方式、注入策略和適用場景略有不同。本文將深入探討這兩種注解的原理、使用方法及優(yōu)缺點(diǎn),幫助讀者更好地理解和運(yùn)用Spring依賴注入機(jī)制2023-04-04
Springboot配置AOP的注解切點(diǎn)失效解決方案
本文探討了在Spring框架中使用AOP攔截靜態(tài)方法調(diào)用的實(shí)現(xiàn)細(xì)節(jié),重點(diǎn)在于ApplicationContext和ApplicationContextAware接口的使用差異,通過對比兩種獲取Bean的方式,最終解決了切點(diǎn)無法被攔截的問題2026-06-06
Java數(shù)據(jù)結(jié)構(gòu)之鏈表的概念及結(jié)構(gòu)
這篇文章主要介紹了數(shù)據(jù)鏈表的概念及結(jié)構(gòu),鏈表是一種物理存儲結(jié)構(gòu)上非連續(xù)、非順序的存儲結(jié)構(gòu),數(shù)據(jù)元素的邏輯順序是通過鏈表中的指針鏈接次序?qū)崿F(xiàn)的。想進(jìn)一步了解的同學(xué),可以參考閱讀本文2023-04-04
Mybatis?Plus字段為空值時(shí)未更新問題及解決
在使用MybatisPlus的UpdateById()方法時(shí),如果字段從前臺傳入的數(shù)據(jù)為空值,則該字段不會得到更新,可以通過使用@TableField注解的fill屬性、全局配置update-strategy屬性或使用UpdateWrapper類來解決此問題2026-05-05

