jdk8 函数式接口

感谢 JDK8新特性-java.util.function-Function接口_霍亚静 不管风吹浪打,胜似闲庭信步-CSDN博客_java.util.function14年,Oracle公司如期发布了Java 8正式版。现如今4年过去了,终于鼓起勇气认真对待它,就好似虽然认识了好几年的伙伴,突然感觉要成为情侣的感觉…… JDK 1.8 API包含了很多内建的函数式接口,在老Java中常用到的比如Comparator或者Runnable接口,这些接口都增加了@FunctionalInterface注解以便能用在lambda上。现如今,我们则从Function常https://blog.csdn.net/huo065000/article/details/78964382

     标注为 FunctionalInterface 的接口被称为函数式接口,该接口只能有一个自定义方法,但是可以包括从object类继承而来的方法。如果一个接口只有一个方法,则编译器会认为这就是一个函数式接口。是否是一个函数式接口,需要注意的有以下几点:

  1.     该注解只能标记在”有且仅有一个抽象方法”的接口上。
  2.     JDK8接口中的静态方法和默认方法,都不算是抽象方法。
  3.     接口默认继承java.lang.Object,所以如果接口显示声明覆盖了Object中方法,那么也不算抽象方法。
  4.     该注解不是必须的,如果一个接口符合”函数式接口”定义,那么加不加该注解都没有影响。加上该注解能够更好地让编译器进行检查。如果编写的不是函数式接口,但是加上了@FunctionInterface,那么编译器会报错。
  5.     在一个接口中定义两个自定义的方法,就会产生Invalid ‘@FunctionalInterface’ annotation; FunctionalInterfaceTest is not a functional interface错误.
     

针对 第 3 点,补充说明下,覆盖 Object 的方法后,不能给与实现,只能是接口声明,不然会违背第 1 点报错,下面给个demo:


@FunctionalInterface
interface A {

	void add();
	
	default void print() {
		
	}
}
@FunctionalInterface
interface B extends A {

	void add();

	/**
	 * 接口默认继承java.lang.Object,所以如果接口显示声明覆盖了Object中方法,那么也不算抽象方法。
	 * 但不能重新实现该方法,会报错
	 * @return
	 */
	@Override
	String toString();
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值