为了账号安全,请及时绑定邮箱和手机立即绑定

通过反射区分方法是否有任意数量的参数

通过反射区分方法是否有任意数量的参数

月关宝盒 2023-03-17 10:30:33
在使用反射调用的时候,有什么方法可以区分这两个方法吗?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 所暗示的那样,您需要以任何一种方式传递一个数组(作为单个参数)。有关示例,请参见此问题。


查看完整回答
反对 回复 2023-03-17
?
倚天杖

TA贡献1828条经验 获得超3个赞

一个明显的非答案:反思并不重要。这两种方法都需要一个对象数组作为参数传递。

当这两种方法在反射中使用完全相同的方式时,如果源代码说“array”或“varargs”有什么关系呢?!你看,当你需要做的事情不需要信息时,不关心那个细节是件好事。

除此之外:显然编译器需要能够区分这两种方法,因此类文件中提供了这些信息。但是对于反思,如前所述,这并不重要。因此,如果您不能使用反射来区分需要数组的方法和需要可变参数的方法,我也不会感到惊讶。


查看完整回答
反对 回复 2023-03-17
  • 2 回答
  • 0 关注
  • 116 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信