5

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

假设我有方法;

getNames(String like, int amount);

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

String[] params = new String[] {"jack", "25"};

有什么方法可以使用 params 数组获取和调用此方法?

4

4 回答 4

2

你可以试试


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.
  }
}
于 2009-11-18T10:13:34.570 回答
1

听起来像元编程。如果您设置在 JVM 平台上,您可能需要研究 Groovy/Scala。

于 2009-11-18T10:09:27.527 回答
0

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

于 2009-11-18T10:13:05.787 回答
-1

对于动态编程,请使用动态编程语言。Java 不太适合这种东西。

无论如何,请查看反射 API,但如果您打算为您的应用程序进行大量类似的编程,请考虑其他替代方案。

于 2009-11-18T12:21:15.373 回答