将反射方法作为参数传递(功能接口)
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
,只留下匹配的方法。
我有以下功能界面
@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
,只留下匹配的方法。