[Java]函数式接口

190 阅读1分钟
()->{};

函数式接口的一个表达,本质是一个方法的具象化,含义是实现接口里面定义的那一个抽象方法,具体是哪个接口,需要看 = 号左边的定义:

    Runnable r1 = () -> {};

其实就是下面代码的变种

    Runnable r = new Runnable() {
        @Override
        public void run() {
        }
    };

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

x::y
X::y

这种其实也是方法的传递,跟上面的意思一样,直接把右边静态方法或者成员方法拿来填充到左边接口的未实现的方法里

    Integer i = 3;
    Runnable r2 = i::toString;

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

++提醒:加不加@FunctionalInterface对于接口是不是函数式接口没有影响,该注解知识提醒编译器去检查该接口是否仅包含一个抽象方法++