Java 函数式接口
在Java中,函数式接口(functional interface)是指仅包含一个抽象方法的接口。这种类型的接口通常用于表示简单的函数签名,并可与lambda表达式或方法引用结合使用,从而提供一种更简洁、更灵活的编程方式。
Java 8引入了函数式接口的概念,以及一个新的注解@FunctionalInterface
。这个注解不是必须的,但它可以帮助开发者更清楚地表明接口的设计意图,并且可以让编译器检查是否符合函数式接口的定义(即只有一个抽象方法)。
下面是几个Java内置的函数式接口的例子:
-
Runnable
:无参数,无返回值。@FunctionalInterface public interface Runnable { void run(); }
-
Supplier<T>
:无参数,返回一个T类型的结果。@FunctionalInterface public interface Supplier<T> { T get(); }
-
Consumer<T>
:接收一个T类型的参数,无返回值。@FunctionalInterface public interface Consumer<T> { void accept(T t); }
-
Function<T, R>
:接收一个T类型的参数,返回一个R类型的结果。@FunctionalInterface public interface Function<T, R> { R apply(T t); }
-
Predicate<T>
:接收一个T类型的参数,返回一个boolean结果。@FunctionalInterface public interface Predicate<T> { boolean test(T t); }
函数式接口可以通过lambda表达式、方法引用或匿名类来实现。例如,使用Predicate<T>
函数式接口和lambda表达式来检查一个数字是否大于5可以写成:
Predicate<Integer> isGreaterThan5 = x -> x > 5;
以上代码创建了一个Predicate<Integer>
类型的变量isGreaterThan5
,它可以被用来测试一个整数是否大于5。
函数式接口是Java中实现函数式编程风格的关键部分,它们使得将函数作为一等公民(first-class citizens)成为可能,从而允许将代码块作为数据传递。这种方式在进行事件处理、异步操作以及集合库的流操作时尤为有用。