关于@FunctionalInterface注解

简介: FunctionalInterface

函数式接口:首先是一个接口,然后就是在这个接口里面只能有一个抽象方法。

java 8为函数式接口引入了一个新注解@FunctionalInterface,主要用于编译级错误检查,加上该注解,当你写的接口不符合函数式接口定义的时候,编译器会报错。

image.png

@FunctionalInterface标记在接口上,“函数式接口”是指仅仅只包含一个 抽象方法*的接口。 在编译期间检查。

  • 1、该注解只能标记在"有且仅有一个抽象方法"的接口上。
  • 2、JDK8接口中的静态方法和默认方法,都不算是抽象方法。
  • 3、接口默认继承java.lang.Object,所以如果接口显示声明覆盖了Object中方法,那么 也不算抽象方法。

image.png

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

使用案例

@FunctionalInterface
public interface Person {
    //抽象方法
    public abstract void  sub();
//    //java.lang.Object中的方法不是抽象方法
//    @Override
//    public boolean equals(Object v1);
//    // default不是抽象方法
//    public default void defaultMethod(){
//        System.out.println("hello");
//    }
//
//    //static不是抽象方法
//    public static void staticMethod(){
//    }
}
public class TestPer {
    public static void main(String[] args) {
        //使用Lambda表达式 实现了sub()方法
        Person person = () ->{
            System.out.println("hello,person");
        };
        //使用匿名内部类 实现sub()方法
        Person person2 = new Person() {
            @Override
            public void sub() {
                System.out.println("hello,person 2");
            }
        };
        person.sub();
        person2.sub();
    }
}
目录
相关文章
|
存储 SQL 弹性计算
TiDB概述:定义与基本概念
【2月更文挑战第25天】TiDB是一款高性能、分布式的关系型数据库,它采用Go语言开发,兼容MySQL协议和生态,能够为用户提供强大的数据存储和查询能力。本文将详细介绍TiDB的定义、基本概念以及其核心特性,更好地理解这一开源数据库产品。
1448 5
|
Java Apache Scala
【阿里云镜像】配置阿里云Maven 镜像
【阿里云镜像】配置阿里云Maven 镜像
25537 1
【阿里云镜像】配置阿里云Maven 镜像
|
人工智能 运维 自然语言处理
对话蚂蚁开源蒋炜:让 Agent 把运维人员从 24 小时的待命中解放出来
当整个行业的智慧都集中在一件事情上时,比起闭门造车,开源一定能带来更好的技术迭代和发展。CodeFuse 「编码挑战季」活动火热进行中,诚邀广大开发者们参与编码挑战
567 3
对话蚂蚁开源蒋炜:让 Agent 把运维人员从 24 小时的待命中解放出来
|
新零售 算法 搜索推荐
理解图表示学习中的负采样 | KDD论文解读
本文“Understanding Negative Sampling in Graph Representation Learning”已被KDD 2020录用。
理解图表示学习中的负采样 | KDD论文解读
|
Java 应用服务中间件 Spring
Spring中refresh分析之onRefresh方法详解
Spring中refresh分析之onRefresh方法详解
364 0
|
Web App开发 JavaScript 前端开发
构建现代Web应用:Vue.js与Node.js的完美结合
在当今快速发展的Web技术领域,选择合适的技术栈对于开发高效、响应迅速的现代Web应用至关重要。本文深入探讨了Vue.js和Node.js结合使用的优势,以及如何利用这两种技术构建一个完整的前后端分离的Web应用。不同于传统的摘要,我们将通过一个实际的项目示例,展示从搭建项目架构到实现具体功能的整个过程,着重介绍了Vue.js在构建用户友好的界面方面的能力,以及Node.js在处理服务器端逻辑和数据库交互中的高效性。通过本文,读者不仅能够理解Vue.js与Node.js各自的特点,还能学习到如何将这两种技术融合应用,以提升Web应用的开发效率和用户体验。
|
iOS开发 开发者
iOS 上架报错:无法添加以供审核
iOS 上架报错:无法添加以供审核
|
XML 定位技术 数据格式
ENVI感兴趣区(ROI)文件由XML格式转换为ROI格式的方法
ENVI感兴趣区(ROI)文件由XML格式转换为ROI格式的方法
504 1

热门文章

最新文章