对于我正在创建的一个非常抽象的应用程序,我需要在不知道它们的参数类型的情况下调用方法,并且只知道String形状中的参数。
假设我有方法;
getNames(String like, int amount);
我有一个包含2个参数的字符串数组,所以我说我有;
String[] params = new String[] {"jack", "25"};
有没有办法可以使用params数组获取并调用此方法?
答案 0 :(得分: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.
}
}
答案 1 :(得分:1)
听起来像元编程。如果您在JVM平台上设置,则可能需要查看Groovy / Scala。
答案 2 :(得分:0)
查看Java反射API,他们应该(尽管我不记得)确保能够为您提供确定不同类型参数所需的信息。然后,您必须迭代列表并根据反射API告诉您的方法智能地转换每个列表。
答案 3 :(得分:0)
对于动态编程,请使用动态编程语言。 Java不太适合那种东西。
无论如何看一下反射API,但是如果你计划为你的应用程序做很多编程,请考虑其他选择。