我想得到数组的所有元素,其中包含方法的Param类型(使用 Java.reflect 动态获取),
这是代码,如果我在方法中有2个参数:
Method testMethod = c.getMethod(method.getName(), new Class[] {int.class, String.class});
但它应该是动态的,所以我使用:method.getTypeParameters()
在所有param类型上返回一个数组。
然后当我写道:
Method testMethod = c.getMethod(method.getName(), new Class[] {method.getParameterTypes});
但它给了我: 类型不匹配:无法从类[]转换为类
我明白我必须循环参数,因为我有:
method.getParameterTypes[0] // gives "int"
和
method.getParameterTypes[1] // gives "String"
那我怎么能做到这一点?也许一个循环?你对此有什么想法吗?谢谢。
答案 0 :(得分:0)
Method testMethod = c.getMethod( method.getName(), new Class[] {method.getParameterTypes});
应该是
Method testMethod = c.getMethod(
method.getName(), method.getParameterTypes());
第一个问题是您错过()
末尾的getParameterTypes
。调用方法时,Java需要明确的括号。
第二个问题是,您试图将getParameterTypes
的结果Class<?>[]
放在Class[]
内。 Class[]
唯一可以包含的是单个类,而不是数组,因此只需使用getParameterTypes()
返回的数组。
我不清楚你为什么这么做。您可以从接口中获取Method
并将其应用于该接口的实例,而无需在实例的具体类上查找该方法。类似的抽象类。除非在继承图中有一个漏洞或某种奇怪的相应静态方法约定,否则您不需要使用一个方法签名来获取另一个方法。其中任何一个都可能是重构的机会。
您的代码库反映越少,人们学习起来就越容易,您将从错误查找器和其他分析工具中获得更多的里程数,以及您将遇到的不完整的类路径问题。
答案 1 :(得分:0)
如果您想查看类型,请使用Arrays.toString(method.getParameterTypeas())
。如果你想迭代它们并使用它们,请使用循环:
for (Class<?> type : method.getParameterTypeas()) {
// use the type
}