JDK8新特性:函数式接口@FunctionalInterface的使用说明

转载(https://blog.csdn.net/aitangyong/article/details/54137067

我们常用的一些接口可赎回,可运行状态,比较器等在JDK8中都添加了@FunctionalInterface注解。

package java.lang;

 * @author  Arthur van Hoff
 * @see     java.lang.Thread
 * @see     java.util.concurrent.Callable
 * @since   JDK1.0
 */
@FunctionalInterface
public interface Runnable {

    public abstract void run();
}

通过JDK8源码的javadoc中,可以知道这个注解有以下特点:

  • 如图1所示,该注解只能标记在“有且仅有一个抽象方法”的接口上。
  • JDK8接口中的静态方法默认状语从句:方法,都不算是抽象方法。
  • 接口默认继承java.lang.Object继承中,所以如果接口显示声明覆盖了对象中方法,那么也不算抽象方法。
  • 如图4所示,该注解不是必须的,如果一个接口符合“函数式接口”定义,那么加不加该注解都没有影响。加上该注解能够更好地让编译器进行检查。如果编写的不是函数式接口,但是加上了@FunctionInterface,那么编译器会报错。
       @FunctionalInterface
        public interface xxxFunctionalInterface{
            Object xxxAbstractMethod(List param);
        }

作用:

使用@FunctionalInterface可以防止以后在接口中添加新的抽象方法签名。就是限定了只能用此抽象方法,别的方法不能用。直接限制死。

@FunctionalInterface
public interface FunctionalInterfaceTest {

    Object doMethod(Object a);
}
    

    @Test
    public void functionalInterfaceTest() {
        test2(list -> {
            System.out.println(list);//执行t的doMethod
            return "doMethod方法执行完成";
        });
    }

    public void test2(FunctionalInterfaceTest t) {
        System.out.println("方法test2被调用");
        final Object o = t.doMethod("执行t的doMethod");
        System.out.println("打印doMethod的返回值" + o);
    }
执行结果:

方法test2被调用
执行t的doMethod
打印doMethod的返回值doMethod方法执行完成

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值