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

在使用反射调用的时候,有什么方法可以区分这两个方法吗?


public void method(Object[] args) {}


public void method(Object... args) {}


月关宝盒
浏览 117回答 2
2回答

慕森卡

您可以Parameter通过 测试 a 是否为可变参数参数Parameter#isVarArgs()。true如果此参数表示可变参数列表,则返回;否则返回false。该Executable接口有一个类似的方法,它同时Constructor实现Method。true如果此可执行文件被声明为采用可变数量的参数,则返回;否则返回false。但是,如果我正确理解您问这个问题的原因,那么知道这些信息对您没有帮助。参数是否为可变参数不会影响您调用Method#invoke. 正如 GhostCat 所提到的和 Ferrybig 所暗示的那样,您需要以任何一种方式传递一个数组(作为单个参数)。有关示例,请参见此问题。

倚天杖

一个明显的非答案:反思并不重要。这两种方法都需要一个对象数组作为参数传递。当这两种方法在反射中使用完全相同的方式时,如果源代码说“array”或“varargs”有什么关系呢?!你看,当你需要做的事情不需要信息时,不关心那个细节是件好事。除此之外:显然编译器需要能够区分这两种方法,因此类文件中提供了这些信息。但是对于反思,如前所述,这并不重要。因此,如果您不能使用反射来区分需要数组的方法和需要可变参数的方法,我也不会感到惊讶。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java