更改参数量的Java函数调用

更改参数量的Java函数调用,java,function,methods,dynamic,runtime,Java,Function,Methods,Dynamic,Runtime,我有个问题。 当我的程序运行时,我得到一个带有参数(我事先不知道确切的数量)、函数名和类名的请求。我在运行时加载该类,并希望调用请求中给出的方法。我现在的问题是: 如何调用参数量不断变化的函数 myClass.getMethod(this.metaData.getFunctionName(), java.lang.Integer); 这是一个正常的电话。 但是我想要这样的东西 myClass.getMethod(this.metaData.getFunctionName(), ..args);

我有个问题。 当我的程序运行时,我得到一个带有参数(我事先不知道确切的数量)、函数名和类名的请求。我在运行时加载该类,并希望调用请求中给出的方法。我现在的问题是: 如何调用参数量不断变化的函数

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));
还是像这样

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);
}
请求必须以
字符串
数组的形式发送参数类型

[
  "java.lang.String",
  "java.lang.Integer",
  ...
]
但是,是的,不要这样做。

顺便说一句,你是在说一个网络请求吗?哪种请求?

您可能需要类似的请求

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);
}
请求必须以
字符串
数组的形式发送参数类型

[
  "java.lang.String",
  "java.lang.Integer",
  ...
]
但是,是的,不要这样做。

顺便说一句,你是在说一个网络请求吗?哪种请求?

听起来很危险。谁在发送此请求?所有参数都是相同类型的吗?您在寻找吗?客户端正在发送此请求,并且参数的类型不同,它们甚至可以是自定义对象。这听起来非常不安全。听起来很危险。谁在发送此请求?所有参数都是相同类型的吗?您在寻找吗?客户端正在发送此请求,并且参数的类型不同,它们甚至可以是自定义对象。这听起来非常不安全。这就是解决方案。但我的支持票不可见。它来自一个post请求,该请求被映射到一个请求对象。但是安全性在这个项目中以某种形式给出了^^。这就是解决方案。但我的支持票不可见。它来自一个post请求,该请求被映射到一个请求对象。但是在这个项目中,安全性是以某种形式给出的。