改变参数数量的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函数调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55250480/

相关文章:

java - Spring分别缓存列表中的所有元素

java - 将 3 个数组列表合并为一个

function - 元组函数的 Scala 返回类型

c - 数组指针作为参数传递给其他函数时会更改值

java - 如何在单个方法中返回 int 日期、月份、年份

java - 仅使用单个循环打印星形图案而不使用递归?

java - 将 Integer.parseInt 的结果分配给 char 原语

c - 使用带有数组的函数?代码不起作用

java - Java 中的泛型方法

PHP OOP 需要建议