问题描述
package test;import java.lang.reflect.Method;public class OtherTest {public void doTest(OtherTest[] tests){}public static void main(String[] args) throws Exception{Class clazz = Class.forName("test.OtherTest");Method method = clazz.getDeclaredMethod("doTest", OtherTest[].class);}}请问有没办法通过clazz替换掉getDeclaredMethod的第二个入参,上面是写死成OtherTest[].class,但是实际情况下,需要写成通用方式,谢谢。注:目前采用将入参OtherTest[]修改为一个中间类的方式规避,请不要告知这种解决办法。
解决方案
只按方法名称查询:package bluechip.lang;import java.lang.reflect.Method;public class TestReflect {public void doTest(TestReflect[] tests) {}public static void main(String[] args) throws Exception {Class clazz = Class.forName("bluechip.lang.TestReflect");Method[] methods = clazz.getDeclaredMethods();for (Method method : methods) {if (method.getName() == "doTest") {System.out.println(method);break;}}}}
解决方案二:
你如果想通过映射获取方法public void doTest(OtherTest[] tests) 肯定最后还是要给死参数类型的不明白你要的通用指的是啥
解决方案三:
不知道你想要怎么个通用法? 比如介绍几种场景。springframework.util.ClassUtils/ReflectionUtils 工具类提供了很多简便方法而且你应该也知道public void doTest(OtherTest[] tests){ } 不如public void doTest(Class<?>... clazz){ 更通用。而且我们也知道Class<?>... clazz这是不可预测的,怎么能做成通用的? 不知道你所说的通用是指什么?