我们常用的一些接口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的使用说明相关推荐

  1. java8 interface_Java8新特性:函数式接口@FunctionalInterface使用说明

    我们常用的一些接口Callable,Runnable,Comparator等在JDK8中都添加了@FunctionalInterface 注解: 通过JDK8 源码javadoc,可以知道@Funct ...

  2. JDK8中的新特性——函数式接口

    JDK8 简介 概述 Java 8由Oracle从2014年3月18日发布,此版本是自Java 5(发布于2004年)之后的一个重量级版本,也是java发展史上的一个里程碑式的版本.这个版本在JVM. ...

  3. 学习笔记之-java8的新特性-函数式接口,lambda表达式,方法引用,Stream API,Optional类

    1.Lambda表达式 用匿名内部类的方法去创建多线程1.new Thread2.参数传递new Runnable3.重写run方法4.在run方法中去设置线程任务5.调用start问题:我们最终目标 ...

  4. jdk8新特性(接口新特性、lambda表达式、方法引用、函数式接口、Stream流)和单例设计模式

    1.单例设计模式 1.概念: 设计模式:使用固有的流程或方式设计出来的类接口.枚举等元素 2.设计原则: 1.私有化构造方法[private.protected] 2.类中创建最终对象[唯一不能被赋值 ...

  5. java8新特性_乐字节-Java8新特性-函数式接口

    上一篇小乐带大家学过 Java8新特性-Lambda表达式,那什么时候可以使用Lambda?通常Lambda表达式是用在函数式接口上使用的.从Java8开始引入了函数式接口,其说明比较简单:函数式接口 ...

  6. java新特性-函数式接口-作为方法参数-作为方法的返回值-常用函数式接口-Supplier-Consumer-Predicate-Function

    文章目录 函数式接口 概念 函数式接口作为方法参数 函数式接口作为方法的返回值 常用函数式接口 Supplier接口 常用函数式接口 Consumer 函数式接口之 Predicate接口 常用接口之 ...

  7. JDK8新特性之接口默认方法与静态方法

    接口默认方法与静态方法 有这样一些场景,如果一个接口要添加一个方法,那所有的接口实现类都要去实现,而某些实现类根本就不需要实现这个方法也要写一个空实现,所以接口默认方法就是为了解决这个问题. 接口静态 ...

  8. JDK8新特性之函数式接口

    转载自 JDK8新特性之函数式接口 什么是函数式接口 先来看看传统的创建线程是怎么写的 Thread t1 = new Thread(new Runnable() {@Overridepublic v ...

  9. jdk8新特性(Lambda、Steam、函数式接口)

    JDK8新特性 JDK8新特性 Lambda表达式 函数式(Functional)接口 方法引用与构造器引用 方法引用 构造器引用 强大的 StreamAPI 创建Stream方式 Stream 的中 ...

最新文章

  1. CTO的眼界到底有多宽
  2. 乔布斯成功的七条秘诀
  3. 算法--组合数学:杨辉三角数学分析以及Java实现
  4. sklearn随笔-归一化(标准化)
  5. pta函数统计素数并求和_关于求和的4种函数公式,此文讲透了,尤其是第4种,绝对的高效...
  6. android 服务自动结束,Android服务自动停止
  7. C/C++ 进程的探索(fork函数)
  8. 状态栏背景颜色(转载)
  9. 理解WordPress的PingBack和TrackBack
  10. 如何理解Python装饰器?
  11. Docker学习总结(17)——学会使用Dockerfile
  12. linux授权命令chmod777_【HDFS篇02】HDFS命令行操作
  13. 原生js对数组操作(find,findIndex)
  14. 矩阵计算器+求线性代数n阶行列式代码
  15. DDS(Direct Digital Synthesizer)数字频率合成器
  16. obs源码简析之推流
  17. 如何拥有一个属于自己的网站
  18. java excel 加边框_java通过poi来设置表格边框
  19. php如何实现性格测试,一个很准的性格测试
  20. 直播小程序推出,解锁2018微信直播新玩法

热门文章

  1. python列表的内置方法_Python内置方法详解
  2. java display属性_JavaScript中的style.display属性操作
  3. matlab中向量norm,【Matlab开发】matlab中norm范数以及向量点积、绘图设置相关
  4. vue mianjs 引用css_vue 学习记录八——webpack中常见的配置项
  5. C语言浮点数据在内存中的存储方式
  6. STM32开启定时器就立即进Update中断问题探索
  7. python语言的类型是_Python到底是强类型语言,还是弱类型语言?
  8. linux 基础学,linux基础学习【1】
  9. npm run build 打包 之后怎么用_npm 组件你应该知道的事
  10. python如何使用文件_Python的文件操作