函数式接口(Functional Interface)是 Java 8 引入的概念,它是一个只包含一个抽象方法的接口。函数接口可以被用作 Lambda 表达式的类型,使得函数式编程在 Java 中更加方便。
在函数式接口中,抽象方法定义了接口的行为。除了抽象方法外,函数接口还可以包含默认方法(default methods)和静态方法(static methods)。
在 Java 中,函数式接口使用 @FunctionalInterface
注解进行标注,这样做有助于提醒开发人员该接口是一个函数式接口,并且编译器会检查该接口是否符合函数式接口的定义。
Java 8 提供了一些常用的函数接口,例如:
Runnable
:表示可以在没有输入参数的情况下执行的代码块。Callable
:表示可以在可能抛出异常的情况下执行且返回结果的代码块。Predicate
:表示一个接受一个参数并返回布尔值的函数。Function
:表示一个接受一个参数并返回结果的函数。Consumer
:表示一个接受一个参数并执行某些操作但不返回结果的函数。Supplier
:表示一个不接受参数但返回结果的函数。
使用函数接口的好处是,可以利用 Lambda 表达式或方法引用来创建接口的实例,并以更简洁的方式编写可读性强的代码。
以下是一个示例,演示如何使用函数接口 Predicate
:
import java.util.function.Predicate; public class PredicateExample { public static void main(String[] args) { Predicate<Integer> isEven = number -> number % 2 == 0; System.out.println(isEven.test(2)); // 输出:true System.out.println(isEven.test(3)); // 输出:false } }
在上述示例中,我们使用 Predicate
函数接口创建了一个 isEven
实例,用于判断一个整数是否为偶数。然后,我们分别测试了两个整数,并输出了结果。
函数接口的默认方法(default methods)和静态方法(static methods)是 Java 8 引入的特性,用于给函数接口提供额外的功能。这两种方法可以在接口中定义,并且具有默认的实现。
默认方法是指在接口中定义的具有方法体的方法。它们提供了一个默认的实现,当某个类实现该接口时,如果没有为该方法提供具体的实现,将会使用默认方法。默认方法使用 default
关键字进行声明。
interface MyInterface { default void myDefaultMethod() { System.out.println("这是一个默认方法"); } } class MyClass implements MyInterface { // 没有提供具体实现,将使用默认方法 } public class DefaultMethodExample { public static void main(String[] args) { MyClass myObj = new MyClass(); myObj.myDefaultMethod(); // 输出:这是一个默认方法 } }
在上述示例中,我们定义了一个函数接口 MyInterface
,其中包含一个默认方法 myDefaultMethod()
。然后,我们创建了一个类 MyClass
,该类实现了 MyInterface
接口并没有提供自己的实现。在主程序中,我们实例化了 MyClass
并调用了 myDefaultMethod()
方法。由于 MyClass
没有为该方法提供具体实现,将会使用接口中的默认方法。
静态方法是指在接口中定义的属于接口本身的方法。它们使用 static
关键字进行声明,可以在不创建接口实例的情况下直接通过接口来调用。
interface MyInterface { static void myStaticMethod() { System.out.println("这是一个静态方法"); } } public class StaticMethodExample { public static void main(String[] args) { MyInterface.myStaticMethod(); // 输出:这是一个静态方法 } }