当前位置: 首页 > news >正文

函数式接口

目录
  • 函数式接口
    • 什么是函数式接口?
    • 主要特征
    • 标准函数式接口
      • 1. 核心基础接口 (最常用)
      • 2. 基础接口的变体
      • 3. 处理两个输入参数的接口
      • 4. 一元操作符
      • 5. JDK 1.8 之前已存在的函数式接口
      • 总结:

函数式接口

什么是函数式接口?

函数式接口是只包含一个抽象方法的接口(可以有多个默认方法或静态方法)。它是Lambda表达式和方法引用的目标类型。

主要特征

  1. 只有一个抽象方法(SAM - Single Abstract Method)

  2. 可以用 @FunctionalInterface 注解标记(非必须,但推荐)

    @FunctionalInterface 是 Java 8 引入的一个注解,用于标识一个接口为函数式接口 (Functional Interface)。
    其核心含义和作用如下:

    • 定义函数式接口:函数式接口是指有且仅有一个抽象方法的接口。它可以被隐式地转换为 Lambda 表达式或方法引用。
      注意:该接口可以包含默认方法 (default)、静态方法 (static) 和重写 Object 类的方法(如 equals, toString),这些都不算作抽象方法。
      编译时检查:
    • 如果你给一个接口添加了 @FunctionalInterface 注解,但该接口没有抽象方法或多于一个抽象方法,编译器会报错。
      这确保了接口的“函数式”特性在开发阶段就被验证,避免后续错误。
    • 明确设计意图:
      向其他开发者清晰地表明:这个接口是专门设计用来支持 Lambda 表达式的,它的主要用途是作为行为参数传递。
    @FunctionalInterface
    public interface Calculator {int calculate(int a, int b); // 唯一的抽象方法// 可以包含默认方法default void printResult(int result) {System.out.println("Result: " + result);}
    }
    

    总结:虽然不加 @FunctionalInterface 注解,只要满足“只有一个抽象方法”的条件,该接口也是函数式接口。但使用此注解是一种最佳实践,因为它提供了编译检查和代码可读性。

  3. 可以有默认方法、静态方法

  4. 可以从父接口继承抽象方法

标准函数式接口

Java 8 在 java.util.function 包中引入了大量内置的函数式接口,它们覆盖了常见的操作场景。主要可以分为以下几类:

1. 核心基础接口 (最常用)

  • Supplier: 无参,返回一个 T 类型的结果。
    • 例如:Supplier s = () -> "Hello";
  • Consumer: 接收一个 T 类型参数,不返回结果(消费型)。
    • 例如:Consumer c = System.out::println;
  • Function<T, R>: 接收一个 T 类型参数,返回一个 R 类型结果(功能转换型)。
    • 例如:Function<String, Integer> f = String::length;
  • Predicate: 接收一个 T 类型参数,返回一个 boolean 值(断言判断型)。
    • 例如:Predicate p = x -> x > 0;

2. 基础接口的变体

为了处理基本数据类型,避免装箱/拆箱开销,提供了特化版本:

  • 针对 double, int, long 的 Consumer:
    • DoubleConsumer, IntConsumer, LongConsumer
  • 针对 double, int, long 的 Supplier:
    • DoubleSupplier, IntSupplier, LongSupplier
  • 针对 double, int, long 的 Predicate:
    • DoublePredicate, IntPredicate, LongPredicate
  • 针对 double, int, long 的 Function 及其组合:
    • DoubleFunction, IntFunction, LongFunction
    • ToDoubleFunction, ToIntFunction, ToLongFunction
    • DoubleToIntFunction, DoubleToLongFunction, IntToDoubleFunction 等。

3. 处理两个输入参数的接口

  • BiConsumer<T, U>: 接收两个不同类型的参数,不返回结果。
  • BiFunction<T, U, R>: 接收两个不同类型的参数,返回一个结果。
  • BinaryOperator: BiFunction 的特殊形式,接收两个相同类型的参数,返回同类型的结果(如加法、最大值)。
  • BiPredicate<T, U>: 接收两个不同类型的参数,返回 boolean。

4. 一元操作符

  • UnaryOperator: Function 的特殊形式,接收和返回同类型的对象(如字符串转大写)。

5. JDK 1.8 之前已存在的函数式接口

这些接口虽然在 Java 8 之前就存在,但因为符合“只有一个抽象方法”的定义,所以也能用于 Lambda 表达式:

  • java.lang.Runnable
  • java.util.concurrent.Callable
  • java.util.Comparator
  • java.awt.event.ActionListener
  • java.io.FileFilter 等。

总结:

java.util.function 包中大约有 40多个 函数式接口。开发者最常使用的是 Supplier, Consumer, Function, Predicate 及其基本类型的变体和 Bi 开头的双参数接口。

http://www.jsqmd.com/news/66821/

相关文章:

  • 2025年终盘点:有机肥生产设备厂家综合能力推荐榜
  • 诚信的高考志愿填报指导公司TOP5权威推荐:深度测评帮你选对
  • 链表:头插法与尾插法 - Higurashi
  • 百奈子产品耐用吗?用户群体解析TOP5榜单:中国国货眼部抗衰
  • 2025年十大液压站厂家排行榜,液压站标准件厂家与定制生产服
  • 北京翻译服务公司选型决策:2025年12月北京优质翻译服务公司综合实力解析
  • 机械制造企业高性价比磨床评测:上海佑台如何平衡品质与成本
  • 2025上海商业场所保洁优质品牌推荐指南
  • 2025年最新快充/重卡/商用/电动车/新能源充电桩厂家 TOP5 推荐:技术落地 + 全域服务的实力之选
  • 2025年宁波高精度地磅厂家推荐,智能地磅厂家哪家靠谱?十大
  • 2025年数字人厂商哪家好?哪家性价比更高?TOP10深度解析与推荐
  • jenkins 通过ssh配置 将java应用程序部署到远程服务器
  • CVE-2025-11778:Circutor PLC设备中危及内存的堆栈缓冲区溢出漏洞深度解析
  • selenium常用界面交互操作
  • 某中心ICASSP 2022五十余篇论文技术概览
  • 大屏适缩放
  • 2025年潍坊诚信的春节花灯厂家排行榜单,宫灯/华景花灯/大型花灯/互动花灯/巡游花灯/非遗花灯/大型户外花灯/传统花灯春节花灯品牌推荐
  • 2025上海商务空间地毯清洗优质品牌推荐指南
  • 2025年汽车托运避坑指南:精选优质公司名单,专业的汽车托运找哪家解决方案与实力解析
  • 最新发布!2025年数字人哪家好?哪家更值得推荐?
  • 学习记录
  • 2025 宠物粮十大品牌排行榜(含处方粮品牌):科学喂养时代,选对口粮守护毛孩健康
  • 2025年最新数字人平台权威排行榜:全方位深度测评与精选推荐
  • 2025年12月工业冷水机,防爆冷水机,风冷螺杆冷水机厂家最新推荐,聚焦资质、案例、售后的十家机构深度解读!
  • 2025上海商务空间窗帘沙发清洗品牌推荐指南
  • 2025年锅炉节省天然气公司权威推荐:锅炉节气/锅炉节能减排/低氮燃烧器源头厂家精选
  • RunCat 竟然要 139MB?我用纯 C 仅花了100KB 就实现了,还支持直接使用表情包gif/webp
  • 2025年水果盒吸塑机批发厂家权威推荐榜单:电子托盘吸塑机‌/塑料盒吸塑机‌/一次性杯盖吸塑机‌‌源头厂家精选
  • 【2025最新】7-Zip下载安装教程(详细图文步骤 + 使用技巧)
  • 成都软件开发公司哪家好?专业性价比高口碑好的软件开发公司