我正在尝试理解反射,并且正在研究如何在示例方法的名称仅为string时调用它。因为这个原因 invoke
从 java.lang.reflect.Method
可以使用。让我烦恼的是它的签名 invoke(Object obj, Object... args)
其中第一个参数是将在其上调用方法的示例,第二个参数只是用于方法调用的参数数组。在反射的情况下,作为数组传递参数是唯一的选择,因为 invoke
可以使用任意数量的参数调用方法。我真正感兴趣的是,当您直接调用方法(无反射)时也会发生同样的事情,参数是否也转换为数组?e、 我有这样的方法 void foo(int x, String s, Bar bar)
在我的 FooClass
如果我打电话 foo
有规律地 new FooClass().foo(7, "HelloWorld", new Bar())
javaunder-the-hood是否也会将这三个参数转换为array,或者只有在使用反射调用方法时才使用array with-argument?
谢谢您
1条答案
按热度按时间7rfyedvj1#
不,从参数创建数组会导致太多的开销。数组仅用于
invoke
因为。。。还有什么可以做的?如何设计一个可以用任意数量的对象和类型调用的方法?你唯一的选择就是varargsObject... args
. (而不是直接数组,使得调用它更麻烦或重载,例如用1,2,3。。。参数)