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
相关产品推荐
相关产品推荐

