JDK8新特性:函數式接口@FunctionalInterface

咱們經常使用的一些接口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));複製代碼
相關文章
相關標籤/搜索