`

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

 
阅读更多
我们常用的一些接口Callable、Runnable、Comparator等在JDK8中都添加了@FunctionalInterface注解。





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

1、该注解只能标记在"有且仅有一个抽象方法"的接口上。

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

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

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

@FunctionalInterface标记在接口上,“函数式接口”是指仅仅只包含一个抽象方法的接口。



如果一个接口中包含不止一个抽象方法,那么不能使用@FunctionalInterface,编译会报错。


比如下面这个接口就是一个正确的函数式接口:

参考
分享到:
评论

相关推荐

    JDK8新特性(pdf版)

    JDK8新特性课程内容包括了解Java发展史、Lambda表达式、接口的增强、函数式接口、方法引用、Stream API、Optional、新时间日期API等。 一、Java发展历史 Java的发展历史可以追溯到1991年,Sun公司成立了一个称为...

    JDK1.8【函数式接口】【定义与使用】【源码】

    JDK1.8【函数式接口】【定义与使用】【源码】 文章地址:https://blog.csdn.net/m0_37969197/article/details/124146253 * 函数式接口(类的定义与适应形式,只是一种类的定义形式,属于新增语法) * 包:java....

    JDK8新特性

    开发者也可以自定义函数式接口,使用`@FunctionalInterface`注解进行标记,以确保接口符合函数式接口的要求。例如: ```java @FunctionalInterface public interface MyFun { public Integer getValue(Integer num...

    JDK8十大新特性详解

    - **语法**:使用`@FunctionalInterface`注解来标记一个接口为函数式接口。 - **示例**: ```java @FunctionalInterface interface Converter, T> { T convert(F from); } // 使用Lambda表达式 Converter, ...

    JDK1.8新特性-New Features in Java SE 8

    为了增强函数式接口的明确性并防止接口因为被误添加新的方法而导致编译失败,Java 8引入了一个新的注解@FunctionalInterface。开发者在定义函数式接口时,可以使用这个注解来明确标注接口的用途。如果一个接口只定义...

    jdk8新特性学习代码

    `@FunctionalInterface`注解用于标识一个接口为函数式接口。 3. **Stream API**: Stream API提供了一种处理集合数据的新方式,它支持一系列的链式操作,如过滤、映射和收集。Stream API非常适合进行并行计算,...

    Java-JDK8新特性总结-接口方法/Lambda/方法引用/Optional

    `@FunctionalInterface`注解用于标识一个接口是函数式接口,但不加此注解并不意味着接口不是函数式接口。Java 8提供了一些内置的函数式接口,如`Runnable`、`Callable`、`Comparator`等。开发者可以通过`@Functional...

    JDK8有新特性.pdf

    为了明确一个接口是函数式接口,可以使用`@FunctionalInterface`注解。如果接口有多个抽象方法,但其中一个被标记为默认方法,那么它仍然可以被视为函数式接口,因为默认方法不算作抽象方法。 例如,自定义一个`...

    JDK1.8新特性函数式接口

    在定义函数式接口的时候可以加入@FunctionalInterface注解来修饰该接口 @Documented @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.TYPE) public @interface FunctionalInterface {} JDK1.8常用函数式...

    jdk1.8新特性总结及使用示例

    这种接口被称为函数式接口。为了避免在这个接口中增加新的方法,使其变成非函数接口,可以在接口上加上@FunctionalInterface注解。 Lambda表达式的用处是使得代码变得非常简洁。例如,使用Lambda表达式可以将一个...

    jdk8新特性.md

    Java 8 为函数式接口引入了注解 `@FunctionalInterface`,用于标识此类接口。 - **示例**: ```java @FunctionalInterface public interface MyFunction, R> { R apply(T t); } ``` #### 4. 方法引用 方法...

    jdk8 jdk9 jdk11等的新特性

    以下是对JDK 8、9、11等版本主要新特性的详细说明: ### JDK 8 新特性 1. **函数式接口**: Java 8 引入了函数式接口的概念,允许接口只有一个抽象方法。这使得接口可以直接被当作函数调用。`@Functional...

    JDK8的新特性探究

    为了规范函数式接口的定义,Java 8引入了@FunctionalInterface注解,尽管其不是必须的,但它可以作为编译时的检查工具,确保接口的定义符合函数式接口的标准。使用Lambda表达式时,其实质就是为函数式接口提供了具体...

    jdk1.8 新特性.docx

    ### JDK 1.8 新特性详解 #### Lambda 表达式 Lambda 表达式是 Java 8 中最重要的新特性之一,它允许开发者以一种简洁的方式编写匿名函数。Lambda 表达式本质上是一个轻量级的匿名内部类,用于简化代码逻辑。 **...

    day22_JDK8新特性.pdf

    JDK8还引入了函数式接口(Functional Interface),这是可以有且仅有一个抽象方法的接口。Lambda表达式可以被视为这些接口的实现。例如,`Runnable`就是一个函数式接口,它的`run`方法就是抽象方法。Java 8提供了...

    JDK8全面认识

    在本知识点介绍中,我们将重点讨论JDK 8中的lambda表达式和函数式接口,以及相关的默认方法和静态方法,以及方法引用的特性。 首先,JDK 8引入了函数式接口的概念。函数式接口是指那些只包含一个抽象方法的接口。...

    jdk8、jkd8中文手册

    2. **函数式接口**:为了支持Lambda,Java引入了`@FunctionalInterface`注解,标记那些只有一个抽象方法的接口。例如,`Runnable`、`Callable`和新的`Consumer`、`Supplier`、`Function`等接口。 3. **方法引用和...

    Java8-JDK8-新特性学习

    2. **函数式接口**:为了支持lambda,Java 8引入了函数式接口的概念。这些接口只能有一个抽象方法,如`Runnable`、`Callable`以及新的`Function`、`Predicate`、`Consumer`等。`@FunctionalInterface`注解用于标记...

    JDK8有新特性.docx

    通过使用`@FunctionalInterface`注解,开发者可以明确表明某个接口是函数式接口,如果接口包含多个抽象方法,编译器会报错。 例如: ```java @FunctionalInterface interface Converter, T> { T convert(F from);...

Global site tag (gtag.js) - Google Analytics