将反射方法作为参数传递(功能接口)

Pass reflection method as argument (functional interface)

我有以下功能界面

@FunctionalInterface
public interface Processor { void handle(String text); }

我有办法

doSomething(Processor processor)

我可以像这样调用 doSomething

public class Demo {
    public void rockTheWorldTest(String text) {
    // Processing 
    }
}

我可以这样称呼它

doSomething(new Demo::rockTheWorldTest);

但我无法知道特定 class 中的方法名称,我想使用来自另一个 class

的反射来调用它
Method[] testClasMethods = DemoAbstractOrchestratorTest.getClass().getDeclaredMethods();
for (Method method : testClasMethods) {
   doSomething(method) // Not able to do this.
}

我不知道导致您采用这种方法的情况或背景,但一种方法是:

(假设您正在循环 Demo.class.getDeclaredMethods()

doSomething((text) -> {
        try {
                method.invoke(new Demo(), text);

        } catch (Exception e) {
                e.printStackTrace();
        }
});

这或多或少等同于当 method 正好是 rockTheWorldTest 时调用 doSomething(new Demo()::rockTheWorldTest);,事实上,我认为你必须确保 method' s 签名“匹配”void handle(String text) 之一。我会在执行“调用”循环之前过滤 testClasMethods,只留下匹配的方法。