目录
[1. 官方定义](#1. 官方定义)
[2. 核心特征](#2. 核心特征)
1. 官方定义
函数式接口(Functional Interface) :有且只有一个抽象方法 的接口,就叫函数式接口。
它是为了 支持 Lambda 表达式 而设计的。
2. 核心特征
- 接口里只能有 1 个抽象方法
- 可以有:
- 默认方法
- 静态方法
- 重写 Object 的方法(如
equals、toString)这些不算抽象方法数量
- 可以使用注解
@FunctionalInterface显式标记- 加了:编译器强制检查是不是只有一个抽象方法
- 不加:只要满足条件,依然是函数式接口
| 接口名称 | 接口类型 | 方法 | 作用 |
|---|---|---|---|
| Consumer | 消费型接口 | void accept(T t) |
有入参,无返回值 → 只管 "消费" 数据 |
| Supplier | 供给型接口 | T get() |
无入参,有返回值 → 只管 "生产" 数据 |
| Function<T,R> | 函数型接口 | R apply(T t) |
有入参,有返回值 → 类型转换 / 处理 |
| Predicate | 断言型接口 | boolean test(T t) |
有入参,返回布尔 → 判断 / 条件 |
例如Runnable接口:
java
@FunctionalInterface
public interface Runnable {
public abstract void run();
}
java.util.function包下面的四个主要的函数式接口:
Function,Predicate,Supplier,Consumer
3.代码测试
函数式接口
java
package com.qcby.function;
import java.util.function.Function;
public class Demo1 {
public static void main(String[] args) {
// Function<String, String> function = new Function<String ,String>() {
// @Override
// public String apply(String o) {
// return o;
// }
// };
//lambda写法
Function<String, String> function = (String s) -> s;
System.out.println(function.apply("Hello World!"));
}
}

断言型接口
java
package com.qcby.function;
import java.util.function.Predicate;
public class Demo2 {
public static void main(String[] args) {
//判断 传入的参数 是否大于 0
// Predicate<Integer> predicate = new Predicate<Integer>() {
// @Override
// public boolean test(Integer o) {
// return o >= 0;
// }
// };
//lambda写法
Predicate<Integer> predicate = (o) -> o >= 0;
System.out.println(predicate.test(-10));
}
}

供给型接口和消费性接口
java
package com.qcby.function;
import java.util.function.Consumer;
import java.util.function.Supplier;
public class Demo3 {
public static void main(String[] args) {
Supplier<Integer> supplier = () -> { return 1024; };
Consumer<Integer> consumer = (i) -> {System.out.println(i); return;};
consumer.accept(supplier.get());
}
}
