我想了解使用 Java 反射调用可变参数方法可能会发生什么。假设我们有一个简单的方法:
void doAllTheThings(Object ... things) {
// ...which does something with all the things...
}
而我们想要动态调用它,所以我们通过反射来获取方法:
Method doItAll = Superklass.getDeclaredMethod("doAllTheThings", Object[].class);
并传入一个数组:
Object[] allTheThings = new Object[] { "abc", true, 15 };
doItAll.invoke(allTheThings);
现在,这似乎不像我的直觉所想的那样起作用。IllegalArgumentException
特别是,当我尝试使用这样的可变参数调用方法时,我似乎得到了各种各样的阴影。
很明显,我在这里缺少一些东西。我的猜测是这在某种程度上与变量如何编组到可变参数中有关。我发现这篇已有四年历史的博客文章似乎在谈论同样的问题,但无法重现那里的“成功”案例。对这里可能发生的事情有任何想法吗?