JDK8新特性:函数式接口@FunctionalInterface的使用说明
我們常用的一些接口Callable、Runnable、Comparator等在JDK8中都添加了@FunctionalInterface注解。
通過JDK8源碼javadoc,可以知道這個注解有以下特點:
1、該注解只能標記在"有且僅有一個抽象方法"的接口上。
2、JDK8接口中的靜態方法和默認方法,都不算是抽象方法。
3、接口默認繼承java.lang.Object,所以如果接口顯示聲明覆蓋了Object中方法,那么也不算抽象方法。
4、該注解不是必須的,如果一個接口符合"函數式接口"定義,那么加不加該注解都沒有影響。加上該注解能夠更好地讓編譯器進行檢查。如果編寫的不是函數式接口,但是加上了@FunctionInterface,那么編譯器會報錯。
@FunctionalInterface標記在接口上,“函數式接口”是指僅僅只包含一個抽象方法的接口。
如果一個接口中包含不止一個抽象方法,那么不能使用@FunctionalInterface,編譯會報錯。
比如下面這個接口就是一個正確的函數式接口:
// 正確的函數式接口
@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(){
?
? ? }
}
————————————————
原文鏈接:https://blog.csdn.net/aitangyong/article/details/54137067
總結
以上是生活随笔為你收集整理的JDK8新特性:函数式接口@FunctionalInterface的使用说明的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Redis 新特性篇:100% 掌握多线
- 下一篇: mysql常用的hint