FunctionalInterface注解

FunctionalInterface 是一个信息性注解类型,用于指示接口类型符合 Java 语言规范定义的函数式接口要求。

从概念上讲,函数式接口只有一个抽象方法,其他方法都有默认的实现。

如果接口声明了一个覆盖 java.lang.Object 的公共方法之一的抽象方法,这也不会进入抽象方法计数,因为接口的任何实现都具有来自 java.lang.Object 或其他地方的实现。

请注意,函数式接口的实例可以使用 lambda 表达式、方法引用或构造函数引用来创建。

如果使用此注解类型对类型进行注解,则编译器需要生成错误消息,除非:

  • 该类型是接口类型,而不是注释类型、枚举或类。

  • 带注释的类型满足函数式接口的要求。

但是,无论接口声明中是否存在 FunctionalInterface 注解,编译器都会将满足函数式接口定义的任何接口视为函数式接口。

注解定义

@Documented
@Retention(RetentionPolicy.RUNTIME)
//Target表明FunctionalInterface只能用来修饰接口、类和枚举
@Target(ElementType.TYPE)
public @interface FunctionalInterface {}

函数式接口只有一个抽象方法

@FunctionalInterface
public interface HelloInterface {
​
    void test1(String str);
​
    void test2();
}

在 HelloInterface 中定义两个抽象方法,编译器会给出提示:在HelloInterface中找到多个非重写的abtract方法。

接口声明覆盖 java.lang.Object的抽象方法,不会进行抽象方法计数

@FunctionalInterface
public interface HelloInterface {
​
    void test1(String str);
​
    String toString();
}

HelloInterface 定义了 toString() 方法,编译器不会给出错误提示,编译可以通过。

函数式接口的实例可以使用 lambda 表达式、方法引用或构造函数引用来创建

public class Test {
​
    public static void main(String[] args) {
        //lambda表达式方法 定义抽象方法test1的实现,生成接口实例
        HelloInterface hello = x -> System.out.println("hello " + x);
        //进行接口调用
        hello.test1("qinghuazs");
       
        //构造器方式来实现抽象方法,生成接口实例
        HelloInterface hello2 = new HelloInterface() {
            @Override
            public void test1(String str) {
                System.out.println("hello construction " + str);
            }
        };
        hello2.test1("qinghuazs");
    }
}

方法引用还没搞明白,等我搞明白了再来补充。

FunctionalInterface 用来修饰类或枚举会编译失败

因为 FunctionalInterface 要求必须有一个抽象方法,所以普通的类肯定是不满足条件的,我们来看一下抽象类。

@FunctionalInterface
public abstract class AbstractTest {
    void test();
}
​
@FunctionalInterface
public enum EnumTest {
    
}

编译器提示 AbstractTest 不是函数式接口,编译失败。

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值