首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >getClass().getMethod("name",未知)

getClass().getMethod("name",未知)
EN

Stack Overflow用户
提问于 2009-11-18 18:05:37
回答 4查看 5.6K关注 0票数 5

对于我正在创建的一个非常抽象的应用程序,我需要在不知道它们的参数类型的情况下调用方法,而只知道字符串形状中的参数。

假设我有这个方法;

代码语言:javascript
复制
getNames(String like, int amount);

我有一个包含2个参数的字符串数组,所以假设我有;

代码语言:javascript
复制
String[] params = new String[] {"jack", "25"};

有没有什么方法可以使用params数组来获取和调用这个方法?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2009-11-18 18:13:35

你可以试一试

代码语言:javascript
复制
String[] params = new String[] {"jack", "25"};
Object[] realParams = new Object[params.length];
Method[] methods = getClass().getMethods();
for (Method method : methods) {
  if (method.getParameterTypes().length == params.length) {
     for (int i = 0; i < method.getParameterTypes().length; i ++) {
        Class<?> paramClass = method.getParameterTypes()[i];
        if (paramClass = String.class) {
           realParams.add(param);
        } else if (paramClass == Integer.class || paramClass == Integer.TYPE) {
           realParams.add(Integer.parseInt(param));
        } else if (other primitive wrappers) {
            ...
        } else {
          realParams.add(null); // can't create a random object based on just string
          // you can have some object factory here, or use ObjectInputStream
        }
     }
     break; // you can continue here if the parameters weren't converted successfully,     
     //to attempt another method with the same arguments count.
  }
}
票数 2
EN

Stack Overflow用户

发布于 2009-11-18 18:09:28

听起来像是元编程。如果您使用的是JVM平台,那么可能需要研究一下Groovy/Scala。

票数 1
EN

Stack Overflow用户

发布于 2009-11-18 18:13:06

查看Java反射API,它们应该(尽管我记不太清楚)能够为您提供确定不同类型参数所需的信息。然后,您必须遍历该列表,并根据反射API告诉您的有关该方法的信息,智能地转换每个列表。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1754894

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档