>我有以下功能接口
@FunctionalInterface
public interface Processor { void handle(String text); }
我有一个方法
doSomething(Processor processor)
我可以称doSomething Like 这样
public class Demo {
public void rockTheWorldTest(String text) {
// Processing
}
}
我可以像下面这样称呼它
doSomething(new Demo::rockTheWorldTest);
但是我将无法知道特定类中方法的名称,我想使用另一个类的反射来调用它
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
的签名"匹配"void handle(String text)
的签名。我会在执行"调用"循环之前过滤testClasMethods
只留下匹配的方法。