java – 在数组中的参数时调用Method.invoke()
我有以下界面:
interface Foo { void bar(String a,int b); } 我想反思地调用Foo.bar(在Foo的实现上).但是,参数是在数组中,我不知道它的大小. 以下不起作用: void gee(Foo someFoo,Method bar,Object[] args) { bar.invoke(someFoo,args); } 这不起作用,因为args被编译器作为单个参数进行威胁,并且数组没有“扩展”到vararg,而是在一个包含单个元素的数组中(内部)包装,即 @Test public void varArgTest() { assertTrue(varArgFoo(new Object[] {1,2}) == 1); } private static <T> int varArgFoo(T... arg) { return arg.length; } 在这种情况下如何调用Method.invoke()以便将数组作为vararg进行威胁? 解决方法
是的,它确实.
使用您提供的代码,数组的元素应该成为varargs参数.如果您没有这样做,要么您没有显示您的实际代码,要么出现其他错误. 如果你的args变量以某种方式没有数组类型(例如它是类型化的Object),那么就可能发生这种情况.但这不是你要展示的代码. 或者,如果你有一些“附加”参数你没有显示(例如你正在尝试做类似bar.invoke(someFoo,firstArg,args);那么它就不会扩展args,因为你正在使用varargs中的方法形式已经. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |