关于@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的定义、基本概念以及其核心特性,更好地理解这一开源数据库产品。
1363 5
|
Java Apache Scala
【阿里云镜像】配置阿里云Maven 镜像
【阿里云镜像】配置阿里云Maven 镜像
23954 1
【阿里云镜像】配置阿里云Maven 镜像
|
存储 关系型数据库 MySQL
MySQL中varchar的最大长度是多少
MySQL中varchar的最大长度是多少
1129 0
|
新零售 算法 搜索推荐
理解图表示学习中的负采样 | KDD论文解读
本文“Understanding Negative Sampling in Graph Representation Learning”已被KDD 2020录用。
理解图表示学习中的负采样 | KDD论文解读
|
Oracle Java 关系型数据库
Java【代码分享 06】Lamda表达式将List对象中的Map对象的key全部转化为大写或者小写(去除外层循环:可用于Map对象中的key全部转化为大写或者小写)
Java【代码分享 06】Lamda表达式将List对象中的Map对象的key全部转化为大写或者小写(去除外层循环:可用于Map对象中的key全部转化为大写或者小写)
586 0
|
XML 前端开发 Java
SpringBoot - SpringMVC的默认配置与修改
SpringBoot - SpringMVC的默认配置与修改
398 0
|
设计模式 架构师 安全
如何提高自己的架构设计能力?
提升架构设计能力涉及深入学习基础知识、业务理解、技术广度与深度、实践经验等多方面。要关注代码的清晰结构、抽象能力、系统性能和可扩展性。学习编程语言、设计模式、系统设计原则和分布式系统是关键。通过实际项目和不断学习反思,可以增强架构设计技能。例如,上述代码展示了清晰的结构和设计原则应用。
857 0
|
机器学习/深度学习 自然语言处理
代码识别模型有哪些
代码识别模型有哪些
297 1
|
Java 应用服务中间件 Spring
Spring中refresh分析之onRefresh方法详解
Spring中refresh分析之onRefresh方法详解
333 0