zoukankan      html  css  js  c++  java
  • JDK8新特性:函数式接口@FunctionalInterface的使用说明

    我们常用的一些接口Callable、Runnable、Comparator等在JDK8中都添加了@FunctionalInterface注解。

    通过JDK8源码javadoc,可以知道这个注解有以下特点:

    1、该注解只能标记在"有且仅有一个抽象方法"的接口上。

    2、JDK8接口中的静态方法和默认方法,都不算是抽象方法。

    3、接口默认继承java.lang.Object,所以如果接口显示声明覆盖了Object中方法,那么也不算抽象方法。

    4、该注解不是必须的,如果一个接口符合"函数式接口"定义,那么加不加该注解都没有影响。加上该注解能够更好地让编译器进行检查。如果编写的不是函数式接口,但是加上了@FunctionInterface,那么编译器会报错。

    @FunctionalInterface标记在接口上,“函数式接口”是指仅仅只包含一个抽象方法的接口

    如果一个接口中包含不止一个抽象方法,那么不能使用@FunctionalInterface,编译会报错。

    比如下面这个接口就是一个正确的函数式接口:

    [java] view plain copy
     
    1. // 正确的函数式接口  
    2. @FunctionalInterface  
    3. public interface TestInterface {  
    4.   
    5.       
    6.     // 抽象方法  
    7.     public void sub();  
    8.   
    9.     // java.lang.Object中的方法不是抽象方法  
    10.     public boolean equals(Object var1);  
    11.   
    12.     // default不是抽象方法  
    13.     public default void defaultMethod(){  
    14.   
    15.     }  
    16.   
    17.     // static不是抽象方法  
    18.     public static void staticMethod(){  
    19.   
    20.     }  
    21. }  
  • 相关阅读:
    Lucene in action 笔记 case study
    关于Restful Web Service的一些理解
    Lucene in action 笔记 analysis篇
    Lucene in action 笔记 index篇
    Lucene in action 笔记 term vector
    Lucene in action 笔记 search篇
    博客园开博记录
    数论(算法概述)
    DIV, IFRAME, Select, Span标签入门
    记一个较困难的SharePoint性能问题的分析和解决
  • 原文地址:https://www.cnblogs.com/toSeeMyDream/p/7873545.html
Copyright © 2011-2022 走看看