Bohr-L Bohr-L
首页
技术
常见面试题
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

刘博

I'm a slow walker, But I never walk backwards.
首页
技术
常见面试题
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • 数据处理与存储类

  • Spring 生态类

  • 缓存问题类

  • 多线程类

  • JVM 类

  • MySQL 类

  • Java 8 + 特性类

    • 使用 Java 8 的优点是什么?
    • 集合与流有何不同?
    • 什么是 Lambda 表达式?
    • 解释 Predicate 和 Consumer 函数式接口
    • peek () 方法在 Java 8 中的作用?
    • 什么是函数式接口?
      • 接口中的静态方法有什么作用?
      • skip (long) 和 limit (long) 的区别?
      • 抽象类和接口的异同?
      • overload 与 override 的区别?
      • HashMap 在 Java 8 中的变化?
      • HashMap、LinkedHashMap、Hashtable、ConcurrentHashMap 的区别?
      • Lambda 参数列表与箭头运算符的作用?
      • sleep () 和 wait () 的区别?
      • throw 与 throws 的区别?
      • final、finally、finalize 的区别?
      • Collection 与 Collections 的区别
      • ArrayList、LinkedList、Vector 的区别?
    • 其他技术类

    • 常见面试题
    • Java 8 + 特性类
    刘博
    2025-12-29
    目录

    什么是函数式接口?

    函数式接口是 Java 8 中支持函数式编程的核心概念,定义为 “有且仅有一个抽象方法的接口”(可包含静态方法和默认方法),具体特性如下:

    # 1. 核心定义与注解

    • 必须满足:接口中只有一个抽象方法(abstract修饰,可省略);
    • 可选注解:@FunctionalInterface(用于编译时校验,若不符合函数式接口定义,编译报错);
    • 允许包含:静态方法(static)、默认方法(default)、Object类的方法(如equals、toString),这些不视为抽象方法。

    # 2. 核心作用

    • 作为 Lambda 表达式的 “目标类型”:Lambda 表达式只能赋值给函数式接口(如Runnable run = () -> System.out.println("run"));
    • 作为方法参数:支持将 Lambda 表达式传入接收函数式接口的方法(如Collections.sort(list, (a,b) -> a.compareTo(b)))。

    # 3. 常见内置函数式接口

    Java 8java.util.function包提供了常用函数式接口,避免重复定义:

    • Predicate<T>:接收 T,返回 boolean(断言);
    • Consumer<T>:接收 T,无返回值(消费);
    • Function<T,R>:接收 T,返回 R(映射);
    • Supplier<T>:无参数,返回 T(供给);
    • Runnable:无参数,无返回值(线程 / 任务)。

    # 示例

    // 1. 自定义函数式接口(带@FunctionalInterface注解)
    @FunctionalInterface
    interface Calculator {
        int compute(int a, int b); // 唯一抽象方法
        
        // 允许静态方法
        static void printResult(int result) {
            System.out.println("结果:" + result);
        }
        
        // 允许默认方法
        default int add(int a, int b) {
            return compute(a, b) + 10;
        }
    }
    
    // 2. Lambda表达式赋值给函数式接口
    Calculator add = (a, b) -> a + b;
    System.out.println(add.compute(2, 3)); // 5
    Calculator.printResult(add.add(2, 3)); // 结果:15
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20

    #


    上次更新: 12/30/2025
    peek () 方法在 Java 8 中的作用?
    接口中的静态方法有什么作用?

    ← peek () 方法在 Java 8 中的作用? 接口中的静态方法有什么作用?→

    最近更新
    01
    CPU 使用率较高排查和解决
    12-29
    02
    JVM OOM 问题如何排查和解决
    12-29
    03
    接口防刷怎么实现?
    12-29
    更多文章>
    Theme by Vdoing | Copyright © 2025-2026 Bohr-L's note
    • 跟随系统
    • 浅色模式
    • 深色模式
    • 阅读模式