我想反思调用Java中此方法:
public void setFoo(ArrayList<String> foo) { this.foo = foo; }
问题是,我想传递null作为null
,这样foo将变成零。
然而,在下面的方法它假定没有参数,我也得到IllegalArgumentException
( wrong number of arguments
):
method.invoke(new FooHolder(), null);
// -----------------------------^ - I want null to be passed to the method...
这是如何实现的呢?
尝试
method.invoke(new FooHolder(), new Object[]{ null });
对我来说,这并不工作:
m.invoke(c.newInstance(),新的对象[] {NULL});
但这种工作原理:
m.invoke(c.newInstance(),新的对象[] {});
编译器警告应该让你意识到了这个问题;
型空的参数应该明确地转换为对象[]从类型法可变参数方法调用(对象,对象...)的调用。 它可以替代性地转换为对象的可变参数调用
您可以修复它像这样;
Object arg = null;
method.invoke(new FooHolder(), arg);
的解释,以解决方案的位已经发布。
Method.invoke()
声明为可变参数数量的功能,这意味着您平时并不需要显式地创建一个对象数组。 只因为你传递一个参数,这可以解释为一个对象数组本身并method.invoke( obj, null)
失败。
例如,如果你的方法有两个参数, method.invoke( obj, null, null)
就完全正常工作。
但是,如果你的方法有一个Object[]
参数,你总是把它包起来。