java8 interface_Java8新特性:函数式接口@FunctionalInterface使用说明

本文解析了JDK8中的@FunctionalInterface注解,重点介绍了其用于标识只有一个抽象方法的接口,以及如何确保接口符合函数式编程概念。通过实例展示了如何创建和使用这样的接口,并解释了注解在编译时的校验作用。
摘要由CSDN通过智能技术生成

我们常用的一些接口Callable,Runnable,Comparator等在JDK8中都添加了@FunctionalInterface 注解:

da6fa882431c8c2fb9a7d9260a9879fd.png

dd09ff7a61df881e4d96f845b9faab46.png

通过JDK8 源码javadoc,可以知道@FunctionalInterface有以下特点:

1.该注解只能标记在"有且仅有一个抽象方法"的接口上,表示函数式接口。

2.JDK8接口中的静态方法和默认方法,都不算是抽象方法。

3.接口默认继承 java.lang.Object,所以如果接口显示声明覆盖了Object中的方法,那么也不算抽象方法。

4.该注解不是必须的,如果一个接口符合"函数式编程"定义,那么加不加该注解都没有影响。加上该注解能够 更好地让编译器进行检查,如果编写的不是函数式接口,但是加上了@FunctionalInterface 那么编译器会报错。

下面接口可以单做一函数式接口:

package com.simple.java8features;

/**

* Created with IntelliJ IDEA.

*

* @author: zhubo

* @description:

* @time: 2018年08月05日

* @modifytime:

*/

@FunctionalInterface

public interface AnnoInterface {

// 抽象方法

public void method();

// java.lang.Object中的方法不是抽象方法

public boolean equals(Object obj);

// default不是抽象方法

public default void defaultMethod() {

}

// static 不是抽象方法

public static void staticMethod() {

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值