【发布时间】:2012-02-27 19:58:31
【问题描述】:
我想了解使用 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。
显然我在这里缺少一些东西。我的猜测是这在某种程度上与变量如何编组到可变参数中有关。我找到了this four year old blog post which seems to be talking about the same issue,但我无法重现那里的“成功”案例。对这里可能发生的事情有任何想法吗?
【问题讨论】:
标签: java reflection variadic-functions arity