咱們經常使用的一些接口Callable、Runnable、Comparator等在JDK8中都添加了@FunctionalInterface註解。java
經過JDK8源碼javadoc,能夠知道這個註解有如下特色:bash
一、該註解只能標記在"有且僅有一個抽象方法"的接口上。函數
二、JDK8接口中的靜態方法和默認方法,都不算是抽象方法。spa
三、接口默認繼承java.lang.Object,因此若是接口顯示聲明覆蓋了Object中方法,那麼也不算抽象方法。.net
四、該註解不是必須的,若是一個接口符合"函數式接口"定義,那麼加不加該註解都沒有影響。加上該註解可以更好地讓編譯器進行檢查。若是編寫的不是函數式接口,可是加上了@FunctionInterface,那麼編譯器會報錯。code
@FunctionalInterface標記在接口上,「函數式接口」是指僅僅只包含一個抽象方法的接口。
cdn
若是一個接口中包含不止一個抽象方法,那麼不能使用@FunctionalInterface,編譯會報錯。blog
代碼實例:繼承
@FunctionalInterface
public interface JedisExecutorNotReturnInterface<T> {
void execute(Jedis jedis);
}
複製代碼
public static void executeNR(JedisExecutorNotReturnInterface executor) {
// 返回值
try ( // 獲取鏈接池裏的鏈接 這裏會自動釋放資源
Jedis jedis = jedisPool.getResource();
)
{
// 業務操做
executor.execute(jedis);
}
}複製代碼
JedisExecutor.executeNR(jedis -> jedis.geoadd(key, memberCoordinateMap));複製代碼