java:java是否将方法参数转换为隐藏的数组?

wxclj1h5  于 2021-06-29  发布在  Java
关注(0)|答案(1)|浏览(273)

我正在尝试理解反射,并且正在研究如何在示例方法的名称仅为string时调用它。因为这个原因 invokejava.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?
谢谢您

7rfyedvj

7rfyedvj1#

不,从参数创建数组会导致太多的开销。数组仅用于 invoke 因为。。。还有什么可以做的?如何设计一个可以用任意数量的对象和类型调用的方法?你唯一的选择就是varargs Object... args . (而不是直接数组,使得调用它更麻烦或重载,例如用1,2,3。。。参数)

相关问题