我有个问题。
当我的程序运行时,我收到一个带有参数的请求(我事先不知道确切的数量),一个函数名和一个类名。我在运行时加载该类,并希望调用请求中给定的方法。我的问题是:
如何使用变化量的参数调用函数?
myClass.getMethod(this.metaData.getFunctionName(), java.lang.Integer);
这将是一个正常的电话。
但是我想要这样的东西
myClass.getMethod(this.metaData.getFunctionName(), ..args);
或像这样
myClass.getMethod(this.metaData.getFunctionName(), for(param p: in request = new param));
我知道这是不可能的,但是否可以通过另一种方式呢?还是我必须提前知道确切的金额?
编辑解决方案:
@LppEdd发布了解决方案,@ DawoodibnKareem在评论中也表示了。如果您有一个用(... args)定义的函数,则可以传递一个数组,并且该数组的每个元素都将作为传递的参数进行计数。
我知道这是非常不安全的,但是该项目以某种方式提供了安全性。
rgds,
丹尼斯
最佳答案
您可能想要类似
private Class<?>[] buildParameterTypes(final List<String> types) {
return types.stream()
.map(typeStr -> {
try {
return Class.forName(typeStr);
} catch (final ClassNotFoundException e) {
throw new IllegalArgumentException(e);
}
}).toArray(Class[]::new);
}
用法
myClass.getMethod(this.metaData.getFunctionName(), buildParameterTypes(strTypeList));
该请求必须以
String
数组形式发送参数类型。[
"java.lang.String",
"java.lang.Integer",
...
]
但是,是的,不要这样做。
顺便说一句,您在谈论网络请求吗?哪种要求?