0

我想获取包含方法的 Param 类型的数组的所有元素(使用Java.reflect动态获取),

如果我在方法中有 2 个参数,这是代码:

Method testMethod = c.getMethod(method.getName(), new Class[] {int.class, String.class});

但它应该是动态的,所以我使用 :method.getTypeParameters()它返回所有参数类型的数组。

然后当我写:

Method testMethod = c.getMethod(method.getName(), new Class[] {method.getParameterTypes});

但它给了我:类型不匹配:无法从 Class[] 转换为 Class

我知道我必须循环参数,因为我有:

method.getParameterTypes[0] // gives  "int"

method.getParameterTypes[1] // gives  "String"

那么我该如何实现呢?也许是一个循环?你对此有什么想法吗?谢谢你。

4

2 回答 2

0
Method testMethod = c.getMethod(
    method.getName(), new Class[] {method.getParameterTypes});

应该

Method testMethod = c.getMethod(
    method.getName(), method.getParameterTypes());

第一个问题是您()缺少getParameterTypes. Java 在调用方法时需要显式括号。

第二个问题是您试图将getParameterTypes, a的结果Class<?>[]放在 aClass[]中。a 唯一Class[]可以包含的是单个类,而不是数组,所以只需使用getParameterTypes().


我不清楚你为什么要这样做。您可以Method从接口中获取 a 并将其应用于该接口的实例,而无需在实例的具体类上查找方法。对于抽象类也是如此。除非继承图中存在漏洞或某种奇怪的相应静态方法约定,否则您不需要使用一个方法签名来获取另一种方法。其中任何一个都可能是重构的机会。

你的代码库中的反射越少,人们学习就越容易,你从错误查找器和其他分析工具中获得的成果就越多,你遇到的不完整类路径问题就越少。

于 2013-04-25T18:44:18.440 回答
0

如果Arrays.toString(method.getParameterTypeas())您想查看类型,请使用。如果要遍历它们并使用它们,请使用循环:

for (Class<?> type : method.getParameterTypeas()) {
    // use the type
}
于 2013-04-25T18:45:01.853 回答