You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java中如何将Callback function作为参数?该用法是否属于回调?

Java 无返回值函数参数传递实现方案

核心实现逻辑:函数式接口

Java本身不支持直接将函数作为参数传递,Java 8及以上版本通过函数式接口实现和JS类似的传函数参数能力。函数式接口指仅包含一个抽象方法的接口,可以用Lambda表达式或者方法引用快速实现。
你当前需求里的处理逻辑都是接收单个参数、无返回值,直接用JDK自带的java.util.function.Consumer<T>接口即可,它的唯一抽象方法是void accept(T t),完全匹配你的使用要求。

你的需求具体代码实现

Java 8及以上版本写法

import java.util.List;
import java.util.function.Consumer;

// 函数A:负责遍历列表,接收元素处理逻辑作为参数
public void processList(List<String> textList, Consumer<String> elementHandler) {
    for (String text : textList) {
        elementHandler.accept(text); // 由函数A决定何时调用传入的处理逻辑
    }
}

// 函数B:你自定义的解析打印逻辑,也可以替换为数据库查询等任意无返回值操作
public void parseAndPrint(String text) {
    // 此处写你的自定义解析逻辑
    String parsedResult = "解析结果:" + text;
    System.out.println(parsedResult);
}

// 调用场景1:直接打印原始文本
processList(你的文本列表, System.out::println);
// 等价Lambda写法:processList(你的文本列表, text -> System.out.println(text));

// 调用场景2:调用函数B解析后再打印
processList(你的文本列表, this::parseAndPrint);
// 等价Lambda写法:processList(你的文本列表, text -> parseAndPrint(text));

Java 8之前版本兼容写法

如果使用Java 8之前的版本,没有内置的Consumer接口,可以自定义函数式接口,通过匿名内部类实现:

import java.util.List;

// 自定义匹配需求的函数式接口
public interface StringHandler {
    void handle(String text);
}

// 函数A定义调整为接收自定义接口参数
public void processList(List<String> textList, StringHandler handler) {
    for (String text : textList) {
        handler.handle(text);
    }
}

// 调用场景1:直接打印
processList(你的文本列表, new StringHandler() {
    @Override
    public void handle(String text) {
        System.out.println(text);
    }
});

// 调用场景2:调用函数B处理
processList(你的文本列表, new StringHandler() {
    @Override
    public void handle(String text) {
        parseAndPrint(text);
    }
});

关于回调函数的定义

这种用法完全可以正确称为回调函数(Callback Function)。
回调函数的核心特征就是:你将一个函数作为参数传入另一个函数,由接收参数的函数在特定时机(比如你这里遍历到每个元素的时候)主动调用这个传入的函数。你在JS中用到的回调和Java的这种实现本质逻辑完全一致,只是Java受语言特性限制,需要用函数式接口做一层包装。

内容的提问来源于stack exchange,提问作者itsaunix

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.19 16:45:02