首页 > Java > java教程 > 正文

Java 中的函数式接口

王林
发布: 2024-08-30 16:04:14
原创
536 人浏览过

它在java 8中首次引入。函数式接口可以定义为具有单个抽象方法的接口。这意味着 java 中的函数式接口仅提供单一的基本功能。但是,除了单个抽象方法之外,函数式接口还可以包含静态方法和默认方法。 java.util.function.Function、java.util.function.Predicate、UnaryOperator、BinaryOperator、Supplier、Consumer 是 java 中内置函数式接口的示例。

开始您的免费软件开发课程

网络开发、编程语言、软件测试及其他

函数式接口的语法

下面给出了基本语法:

public interface MyFunctionalInterface(){
// abstract method
public void functionalMethod();
}
登录后复制

从上面的语法中,我们可以看到名为MyFunctionalInterface的接口只包含一个未实现的方法;这就是为什么它可以被视为一个函数式接口。 它还可以包含静态和默认方法,如下所示:

public interface MyFunctionalInterface(){
public default void defaultMethod(){
// default method logic goes here
}
public static void staticMethod(){
// static method logic goes here
}
// abstract method
public void functionalMethod();
}
登录后复制

此外,可以使用 Lambda 表达式来实现函数式接口,如下所示:

MyFunctionalInterface functionalInterface = () ->{
// basic functionality logic goes here
}
登录后复制
登录后复制

我们还可以使用注释或将接口声明为函数式接口。以下是如何使用注释声明函数式接口:

MyFunctionalInterface functionalInterface = () ->{
// basic functionality logic goes here
}
登录后复制
登录后复制

@FunctionalInterface 是在 java 8 中引入的,用于在接口违反函数式接口规则时出现编译器级别错误。使用@FunctionalInterface注解声明接口使得接口具有功能性,如果使用多个抽象方法,则会产生编译错误。

关于函数式接口的要点

以下是一些要点:

  • 函数接口中只允许有一个抽象方法。如果函数接口不使用 @FunctionalInterface 注解,则可以声明多个抽象方法,但在这种情况下,该接口将被视为非函数式。
  • @FunctionalInterface 注解的使用是可选的;它仅用于编译器级别检查。
  • 函数式接口可以包含任意数量的静态方法和默认方法。
  • 重写父类的方法不会违反函数式接口的规则。

示例:

@FunctionalInterface
public interface MyFunctionalInterface(){
// abstract method
public void functionalMethod();
@Override
public boolean equals(Object object);
//method overridden from parent class
}
登录后复制

由于上述接口重写了父类的方法,并且没有声明多个抽象方法,因此可以将其视为函数式接口。

实现函数式接口的示例

现在我们将看到显示 java 函数式接口的声明和使用的 java 代码示例。

示例#1

在这个例子中,我们将展示如何使用内置函数接口 java.util.function.function 接口。这是Function接口的声明。

界面:

package java.util.function;
public interface Function<T,R>{
public <R> apply(T inputparams);
}
登录后复制

为了使用上面的接口,我们需要在我们的类中实现它,如下所示。

代码:

import java.util.function.*;
public class FunctionalInterfaceDemo implements Function<Integer, Integer>{
@Override
public Integer apply (Integer n){
return n*n;
}
public static void main (String args[]){
FunctionalInterfaceDemo demo = new FunctionalInterfaceDemo ();
Integer sqroot= demo.apply(12);
System.out.println("Square root of 12 is " + sqroot);
}
}
登录后复制

输出:

Java 中的函数式接口

示例#2

在此示例中,我们将了解如何使用 lambda 表达式创建这些接口。

代码:

public class FunctionalInterfaceDemo{
public static void main (String args[]){
// creating functional Interface instance
Runnable r = () -> {System.out.println ("Executing Thread........");};
new Thread(r).start();
}
}
登录后复制

输出:

Java 中的函数式接口

示例 #3

在这个例子中,我们将看到使用另一个内置接口消费者来迭代列表。

代码:

import java.util.function.*;
import java.util.*;
public class FunctionalInterfaceDemo{
public static void main (String args[]){
List<String> list = new ArrayList<String>();
list.add("One");
list.add("Two");
list.add("Three");
list.add("Four");
list.add("Five");
list.add("Six");
// Iterate arraylist using consumer
list.forEach(new Consumer<String>(){
@Override
public void accept(String item){
System.out.println(item);
}
});
}
}
登录后复制

输出:

Java 中的函数式接口

结论

上面的文章让我们对java中的函数式接口有了清晰的认识。使用 java 8 函数式接口的主要优点是支持 lambda 表达式,从而消除了大量样板代码,从而开发出小型、高效且简洁的代码。

以上是Java 中的函数式接口的详细内容。更多信息请关注PHP中文网其他相关文章!

相关标签:
来源:php
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!