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

如何在Java中实现类似Dart的跨类函数传递与调用?

在Java中实现类似Dart的函数传递与执行功能

Java是强类型语言,没有Dart里直接的Function类型来传递函数,但可以通过函数式接口实现相同效果,以下是几种常用实现方式:

1. 自定义函数式接口(适配特定签名)

如果需要传递的函数有特定参数或返回值,可以自定义函数式接口匹配其签名。针对你示例中无参无返回值的场景:

步骤1:定义函数式接口

// @FunctionalInterface确保接口仅含一个抽象方法
@FunctionalInterface
interface VoidFunction {
    void invoke();
}

步骤2:定义接收函数的类

class OtherClass {
    private VoidFunction targetFunction;

    // 构造方法接收函数实例
    public OtherClass(VoidFunction function) {
        this.targetFunction = function;
    }

    // 在类内部执行传递的函数
    public void executeFunction() {
        targetFunction.invoke();
    }
}

步骤3:使用示例

public class Main {
    // 待传递的目标函数
    public static void methodName() {
        System.out.println("执行了传递过来的函数");
    }

    public static void main(String[] args) {
        // 方式1:传递静态方法引用
        OtherClass instance1 = new OtherClass(Main::methodName);
        instance1.executeFunction();

        // 方式2:直接传递Lambda表达式(适合简单逻辑)
        OtherClass instance2 = new OtherClass(() -> {
            System.out.println("通过Lambda传递的函数逻辑");
        });
        instance2.executeFunction();
    }
}

2. 使用Java内置函数式接口(无需自定义)

如果你的函数是无参无返回值的,可直接用Java自带的Runnable接口,它的run()方法正好匹配该签名:

定义接收类

class OtherClass {
    private Runnable task;

    public OtherClass(Runnable task) {
        this.task = task;
    }

    public void runTask() {
        task.run();
    }
}

使用示例

public class Main {
    public static void methodName() {
        System.out.println("执行目标函数");
    }

    public static void main(String[] args) {
        // 传递方法引用
        OtherClass instance = new OtherClass(Main::methodName);
        instance.runTask();

        // Lambda表达式方式
        OtherClass lambdaInstance = new OtherClass(() -> System.out.println("Lambda实现的任务"));
        lambdaInstance.runTask();
    }
}

为什么直接传Void不行?

Java中的Void是表示无返回值的包装类,并非函数类型,无法封装方法逻辑。必须通过函数式接口将方法引用或Lambda表达式包装成对象,才能在类之间传递和执行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 00:12:21