开发者社区> kunfire> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

关于@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();
    }
}

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
ActionContext、ValueStack、OGNL | 学习笔记
快速学习 ActionContext、ValueStack、OGNL 代理,介绍了 ActionContext、ValueStack、OGNL 系统机制, 以及在实际应用过程中如何使用。
9 0
Java Map运用的思考与Funtional Interface联想
Java Map运用的思考与Funtional Interface联想
28 0
Stylus - 方法(Functions)
Stylus - 方法(Functions)
25 0
还在重复写空指针检查代码?考虑使用 Optional 吧!
如果要给 Java 所有异常弄个榜单,我会选择将 NullPointerException 放在榜首。这个异常潜伏在代码中,就像个遥控炸弹,不知道什么时候这个按钮会被突然按下(传入 null 对象)。 还记得刚入行程序员的时候,三天两头碰到空指针异常引发的 Bug,解决完一个,又在另一处碰到。那时候师兄就教我,不要相信任何『对象』,特别是别人给你的,这些地方都加上判断。于是代码通常为会变成下面这样:
49 0
collections模块的Counter类
collections模块自Python 2.4版本开始被引入,包含了dict、set、list、tuple以外的一些特殊的容器类型,分别是: OrderedDict类:排序字典,是字典的子类。
713 0
c++中string::function集合
string append()   1.直接添加另一个完整的字符串:    str1.append(str2);   2.添加另一个字符串的某一段字串:      str1.append(str2, 11,  7);  //添加str2中第11字符之后的7个字符   3.
703 0
+关注
kunfire
sf
文章
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载