【问题标题】:display all array elements of a method param types显示方法参数类型的所有数组元素
【发布时间】:2013-04-19 19:02:03
【问题描述】:

我想获取包含方法的 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"

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

【问题讨论】:

  • 您使用的是getParameterTypes() 还是getTypeParameters()(示例中同时使用了两者)?有很大的不同...
  • 我用getParameterTypes

标签: java dynamic reflection


【解决方案1】:
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 并将其应用于该接口的实例,而无需在实例的具体类上查找方法。对于抽象类也是如此。除非继承图中存在漏洞或某种奇怪的相应静态方法约定,否则您不需要使用一个方法签名来获取另一种方法。其中任何一个都可能是重构的机会。

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

【讨论】:

  • 谢谢它有效。这个过程是外部应用程序向我发送方法名称它的参数和一个 ID,我需要从一个目录加载一个具有此 ID 的 jar。 jar 包含 web 服务客户端的代理类,最终使用 web 服务并使用它的参数执行该方法。我知道这很令人困惑..
【解决方案2】:

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

for (Class<?> type : method.getParameterTypeas()) {
    // use the type
}

【讨论】:

    猜你喜欢
    • 2016-02-12
    • 1970-01-01
    • 1970-01-01
    • 2011-01-20
    • 1970-01-01
    • 2012-02-12
    • 1970-01-01
    • 2023-04-02
    • 1970-01-01
    相关资源
    最近更新 更多