java - 更改参数数量的Java函数调用

标签 java function methods dynamic runtime

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

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",
  ...
]


但是,是的,不要这样做。
顺便说一句,您在谈论网络请求吗?哪种要求?

关于java - 更改参数数量的Java函数调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55250480/

相关文章:

Java 分析 : View binary hprof cpu sampling dumps

java - 我可以通过JDBC连接运行“源”命令(SQL脚本)吗?

javascript - 为什么javascript会跳过某些功能?

javascript - 如果没有 "function"关键字,这个对象方法定义如何工作?

ajax - 部分渲染冗余方法调用

java - MINA 访问消息队列

MATLAB 错误消息 "This statement is not inside any function."

c++ - 将函数作为参数传递给另一个函数的不同方式有什么区别?

javascript - 在 helper 中使用 Meteor.call 时的无限循环

java - 为 Java 应用程序设置全局字体