咱們經常使用的一些接口Callable,Runnable,Comparator等在JDK8中都添加了@FunctionalInterface 註解:java
經過JDK8 源碼javadoc,能夠知道@FunctionalInterface有如下特色:git
1.該註解只能標記在"有且僅有一個抽象方法"的接口上,表示函數式接口。
2.JDK8接口中的靜態方法和默認方法,都不算是抽象方法。
3.接口默認繼承 java.lang.Object,因此若是接口顯示聲明覆蓋了Object中的方法,那麼也不算抽象方法。
4.該註解不是必須的,若是一個接口符合"函數式編程"定義,那麼加不加該註解都沒有影響。加上該註解可以 更好地讓編譯器進行檢查,若是編寫的不是函數式接口,可是加上了@FunctionalInterface 那麼編譯器會報錯。github
下面接口能夠單作一函數式接口:編程
package com.simple.java8features; /** * Created with IntelliJ IDEA. * * @author: zhubo * @description: * @time: 2018年08月05日 * @modifytime: */ @FunctionalInterface public interface AnnoInterface { // 抽象方法 public void method(); // java.lang.Object中的方法不是抽象方法 public boolean equals(Object obj); // default不是抽象方法 public default void defaultMethod() { } // static 不是抽象方法 public static void staticMethod() { } }
GitHub函數式編程