获取getDeclaredMethods()以匹配varargs方法

Ric*_*ick 2 java reflection variadic-functions

我想用它getDeclaredMethod()来找到一个带有这个签名的方法:

public void foo(String inArg1, Object... inArgs);
Run Code Online (Sandbox Code Playgroud)

使用此电话:

Class<?>[] argClasses = { String.class, Integer.class };
Method m = clazz.getDeclaredMethod("foo", argClasses);
Run Code Online (Sandbox Code Playgroud)

但它产生了一个NoSuchMethodException例外.但是,可以调用该方法(假设您以其他方式找到它):

Object[] args = { "arg1", new Integer(2) };
m.invoke(instance, args);
Run Code Online (Sandbox Code Playgroud)

我可以将它们全部列出来,getDeclaredMethods()然后尝试自己进行签名匹配,但这似乎很多工作.

我应该做什么?我只是缺少一些愚蠢的东西吗?

JB *_*zet 5

vararg参数只是数组的语法糖.该方法的签名是

foo(String, Object[]);
Run Code Online (Sandbox Code Playgroud)

并不是

foo(String, Integer);
Run Code Online (Sandbox Code Playgroud)