在使用反射调用的时候,有什么方法可以区分这两个方法吗?public void method(Object[] args) {}public void method(Object... args) {}
2 回答
慕森卡
TA贡献1806条经验 获得超8个赞
您可以Parameter
通过 测试 a 是否为可变参数参数Parameter#isVarArgs()
。
true
如果此参数表示可变参数列表,则返回;否则返回false
。
该Executable
接口有一个类似的方法,它同时Constructor
实现Method
。
true
如果此可执行文件被声明为采用可变数量的参数,则返回;否则返回false
。
但是,如果我正确理解您问这个问题的原因,那么知道这些信息对您没有帮助。参数是否为可变参数不会影响您调用Method#invoke
. 正如 GhostCat 所提到的和 Ferrybig 所暗示的那样,您需要以任何一种方式传递一个数组(作为单个参数)。有关示例,请参见此问题。
倚天杖
TA贡献1828条经验 获得超3个赞
一个明显的非答案:反思并不重要。这两种方法都需要一个对象数组作为参数传递。
当这两种方法在反射中使用完全相同的方式时,如果源代码说“array”或“varargs”有什么关系呢?!你看,当你需要做的事情不需要信息时,不关心那个细节是件好事。
除此之外:显然编译器需要能够区分这两种方法,因此类文件中提供了这些信息。但是对于反思,如前所述,这并不重要。因此,如果您不能使用反射来区分需要数组的方法和需要可变参数的方法,我也不会感到惊讶。
添加回答
举报
0/150
提交
取消