java - 使用反射调用方法/将列表转换为 Var Args

标签 java list reflection invoke variadic-functions

我有一个参数列表和方法名称。我想使用反射调用该方法。 当我检查 java 文档中的 Method.invoke 时,它​​就像 Method.invoke(object o, Object args...) 。 我知道要为第一个参数传递什么(即如果实例方法是在哪个方法上调用的实例)并且 args 是该方法的参数。

但现在我有了包含要传递给方法的值的列表。

例如:我想调用方法 ClassName.methodName(String , int, int) 并且我有一个包含 {val1, 3, 4} 的列表。

使用反射可能类似于 Method.invoke (classNameInstance, ??????)。但我不确定如何将参数列表转换为可变参数并传递。

一种方法可能是如果我知道列表大小为 3,那么我可以编写 Method.invoke (classNameInstance, list.get(0), list.get(1), list.get(2))。

但是我想动态调用的一些方法需要 0 到 12 个参数。因此,创建 switch case 并编写 12 个 case 看起来并不“好”。每个都将检查参数数量并使用参数构建单独的调用。

除了使用 switch case 之外,还有什么办法可以解决这个问题?

任何帮助将不胜感激。

最佳答案

Notation Object... 无非就是 Object[]。它只是 Arraynotation 的语法糖。传递一个数组,它将起作用。

关于java - 使用反射调用方法/将列表转换为 Var Args,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6368684/

相关文章:

java - 避免 PermGen 空间故障的应用程序设计最佳实践

java - android.database.sqlite.SQLiteDatatypeMismatchException : datatype mismatch (code 20)

java - 通过Java Reflection/Scala Reflection调用实例方法: Which one is faster?

PHP:在不实例化类的情况下获取所有类属性(公共(public)和私有(private))的列表

java - 在java反射中将Field.get()返回的Object转换为String[]

java - 使用 2 次递归调用解析堆栈

Java - 队列作为链接​​列表 - 将新节点添加到队列

python datetime.timedelta 放入列表中

C# 为什么当我清除原始对象时我的列表项被清空?

python - 列表中接近重复的元素