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

Flutter中如何将非静态方法作为参数传递?

如何批量调用选中对象的任意非静态方法

你可以通过函数式接口实现通用批量调用需求,不用为每个B类的方法都新增A类的处理方法。以Java为例,具体实现如下:

代码实现

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

class A {
    List<B> bs;

    // 通用批量处理方法,接收选中的B列表和要执行的操作
    void batchFunction(List<B> selectedBs, Consumer<B> action) {
        for (B b : selectedBs) {
            action.accept(b);
        }
    }
}

class B {
    void foo() {
        // 示例逻辑
        System.out.println("执行B的foo方法");
    }

    void bar() {
        // 示例逻辑
        System.out.println("执行B的bar方法");
    }
}

调用示例

public class Demo {
    public static void main(String[] args) {
        A aInstance = new A();
        // 模拟选中的B实例列表
        List<B> selectedBs = List.of(new B(), new B());

        // 批量调用B的foo方法
        aInstance.batchFunction(selectedBs, B::foo);

        // 批量调用B的bar方法
        aInstance.batchFunction(selectedBs, B::bar);

        // 也可以用Lambda表达式传递自定义操作
        aInstance.batchFunction(selectedBs, b -> {
            System.out.println("对B实例执行自定义操作:" + b);
        });
    }
}

原理说明

  • Consumer<B>是Java内置的函数式接口,专门用来接收一个参数且无返回值的操作,刚好匹配B类无参非静态方法的调用场景。
  • B::foo是方法引用语法,用来直接传递B类的非静态方法,本质上是把方法转换成符合Consumer<B>接口的实例。
  • 这种方式可以兼容B类的所有无参方法,甚至能通过Lambda实现任意针对B实例的批量操作,完全不用修改A类的代码。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 05:36:03