一个例子理解Java中的函数式接口

函数式接口就是只包含一个抽象方法的接口。可以这样声明:

复制代码
@FunctionalInterface
interface MultiplyNumbers {
    void multiply(int x, int y);
}

说明:

  • @FunctionalInterface 用于标记这是函数式接口,编译器会检查是否只有一个抽象方法。
  • multiply 是抽象方法,接收两个 int 参数。
  • void 表示该方法不返回值。

之后可以用 Lambda 实现它:

复制代码
MultiplyNumbers obj = (x, y) -> System.out.println(x * y);

注意接口名称要完整写成 MultiplyNumbers,不要截断;方法参数和类型也要与一致。

eg:

java 复制代码
import java.util.Scanner;

@FunctionalInterface
interface MultiplyNumbers {
    void multiply(int x,int y);
}

class Main {

    public static void main(String[] args) {
      // implement the functional interface using lambda expressions
      MultiplyNumbers obj = (x, y) -> {
        System.out.println(x * y);
      };

      Scanner input = new Scanner(System.in);
      int input1 = input.nextInt();
      int input2 = input.nextInt();
    
      obj.multiply(input1, input2);
    }
}

Q&A

Q:obj是接口名吗?

A:不是。这里:

复制代码
MultiplyNumbers obj = (x, y) -> {
    System.out.println(x * y);
};
  • MultiplyNumbers接口类型
  • obj 是一个变量名,表示该接口类型的对象引用
  • (x, y) -> {...} 是 Lambda 表达式,用来实现接口中的 multiply(int x, int y) 方法

可以理解为:

复制代码
MultiplyNumbers obj;
obj = (x, y) -> System.out.println(x * y);

之后通过 obj 调用接口方法:

复制代码
obj.multiply(input1, input2);

因为 MultiplyNumbers 是函数式接口,所以可以直接用 Lambda 创建它的实现。

相关推荐
2301_32241428045 小时前
活力孕康复APP 47737- 原创(免费领源码+部署教程+开发环境)
java·vue.js·spring boot·mysql·微信小程序·idea·微信开发者工具
君顾15 小时前
外卖CPS软件开发实战:从系统架构到部署全流程指南
java·开发语言·外卖
vx_Biye_Design5 小时前
springboot游泳馆系统93765-计算机课程设计、毕业设计
java·javascript·spring boot·后端·python·spring·课程设计
名字还没想好☜5 小时前
Java NIO ByteBuffer 实战:flip/clear/compact 三个绕晕人的方法与 position/limit 心智模型
java·开发语言·后端·spring·nio
Wang's Blog6 小时前
Java框架快速入门: Spring Security+OAuth2之短信服务多供应商动态切换(阿里云与LeanCloud)
java·spring·阿里云
Doubbbbbbble云6 小时前
区间合并问题的常见算法模式与优化思路4
java·数据结构·算法
小溪学编程6 小时前
AQS 原理详解:从 CLH 队列到 ReentrantLock 的实现
java·开发语言
蜗牛互联网6 小时前
语音AI开始边听边说,改变的不只是响应速度
java·人工智能·后端·语音识别
卓怡学长6 小时前
w233基于vue和springboot的宠物管理系统的设计与实现
java·vue.js·spring boot·spring·intellij-idea
我命由我123457 小时前
人脸识别 - 去重时间窗口
java·开发语言·python·学习·java-ee·学习方法·python3.11