微软|Java:在Java中使用函数接口

微软|Java:在Java中使用函数接口

文章图片


接口是定义一组方法及其签名的契约 。 任何类都可以扩展这个接口并实现这个接口的方法 。 Java 编程语言从该语言的最早版本开始就提供了对接口的支持 。
函数式接口是 Java 的一个流行特性 , 在版本8中被添加到该语言中 。 它们允许开发人员将函数创建为一流的对象 , 这为创建可重用代码和简化开发过程开辟了新的可能性 。
本 Java 编程教程将介绍函数式接口、它们的工作原理、它们为何有用 , 以及开发人员如何在项目中使用它们的一些示例 。
Java中的函数接口是什么?
Java中的函数接口是仅由一个抽象方法(即未实现的方法)组成的接口 。 尽管此方法必须有返回类型 , 但它不能接受参数 。 该方法还必须是公共的 , 并且位于可访问的类或接口中 。
除了一个抽象方法之外 , 你还可以在Java的函数接口中创建以下方法:
默认方法
静态方法
从Object类继承的方法
Java中的@FunctionalInterface注释
在Java 8中 , 注释@FunctionalInterface将接口标记为功能接口 。 如果你的接口包含多个抽象方法 , 你可以用此注释标记接口以生成编译器错误 。 Java中的函数接口通常用于lambda表达式它可以有几个默认方法 。
应该注意的是 , 注释@FunctionalInterface是可选的 。 如果一个接口包含一个抽象方法 , 但没有@FunctionalInterface注释 , 它仍然是一个函数接口 , 可能是lambda表达式的目标类型 。 注释防止我们错误地将函数接口修改成非函数接口 , 因为编译器会标记错误 。

Java中的函数式接口有什么好处?
函数式接口最显着的好处是它们使创建多个类无需复制和粘贴代码即可使用的抽象成为可能 。 当开发人员需要创建具有各种方法和行为的复杂抽象时 , 这尤其有用 。
在 Java 中 , 使用函数式接口 , 程序员可以将函数作为参数而不是引用对象传递 , 这减少了你必须编写的样板代码量 。
在函数式编程中 , 一段代码可能被视为数据 。 这就是 lambda 表达式有帮助的地方 。 你可以使用 lambda 表达式将代码传递给另一个函数或对象 。 需要注意的是 , lambda 表达式使用函数式接口作为数据类型 。 因为函数式接口中只有一个抽象方法 , 所以该方法的实现变成了可以作为参数传递给另一个方法的代码 。
Java 中的内置函数式接口
除了 Comparator 和 Runnable 接口之外 , Java 8 中还有许多其他内置的函数式接口 , 例如 Callable、Predicate、Function 和 Consumer 。 这些接口可以在 java.util.function 包中找到 。
下面简要讨论一下 Java 中最常用的内置接口:
Comparator:Comparator是用于根据特定标准比较两个对象的接口 java.util.Comparator 类用于实现这个接口 。
Runnable:它是一个抽象类 , 实现了Runnable接口 , 并提供了一个运行线程的抽象 。
Callable:它表示一个返回单个结果值 T 的任务 , 可以通过调用它的 call() 方法来访问它 。
Future:Future 表示一个异步操作 , 其结果可能尚不可用 , 但最终将在未来某个时间点(当所有待处理的活动已成功完成或未成功完成时)可用 。
Supplier:Supplier只是一个返回值而不带输入参数的函数;这些也称为纯函数 。
Predicate:Predicate 功能接口表示对于由其布尔参数类型 T 指定的某些条件返回 true 或 false 的谓词 。
Consumer:Consumer 函数接口表示接受 T 类型参数并且不返回结果的函数 。

关于 Java 中函数式接口的最终思考
Java 8 中引入的 lambda 表达式提供了新语法改进 , 并有助于消除应用程序中的样板代码 。函数式接口通过减少匿名内部类的冗长性 , 使编写函数式代码变得更加容易 。