我想用
Class.getMethod(String name, Class... parameterTypes)
Run Code Online (Sandbox Code Playgroud)
找到我需要使用给定参数调用的方法,但显然如Bug 6176992中所述,Java不包括那里的自动装箱.因此,如果我的反射类有一个带有(String,int)签名的方法,你仍然会得到一个带有{String.class,Integer.class}数组作为参数的NoSuchMethodException.
这有什么解决方法吗?我能想到的唯一方法是调用getMethod()来处理原始和非原始类型的每个排列,我并不是真的想做.
编辑:为了使它更清楚:我很清楚原始类型类,但我不知道它们如何帮助解决我的问题.我的parameterTypes数组来自某个地方,我知道它只会返回非原始类型.我不能假设接口只会用原始类型声明,这正是我的问题:
public interface TestInterface()
{
public void doTest(Integer i1, int i2, double d3, Double d);
}
Class<?>[] classes = { Integer.class, Integer.class, Double.class, Double.class }
// Due to autoboxing I should become the doTest method here, but it doesn't work
TestInterface.class.getMethod("doTest", classes);
Run Code Online (Sandbox Code Playgroud) 请考虑以下代码段:
public class ReflectionTest {
public static void main(String[] args) {
ReflectionTest test = new ReflectionTest();
String object = new String("Hello!");
// 1. String is accepted as an Object
test.print(object);
// 2. The appropriate method is not found with String.class
try {
java.lang.reflect.Method print
= test.getClass().getMethod("print", object.getClass());
print.invoke(test, object);
} catch (Exception ex) {
ex.printStackTrace(); // NoSuchMethodException!
}
}
public void print(Object object) {
System.out.println(object.toString());
}
}
Run Code Online (Sandbox Code Playgroud)
getMethod()显然不知道a String可以被提供给一个期望的方法Object(事实上,它的文档说它寻找具有指定名称和完全相同的形式参数类型的方法).
是否有一种直接的方法来反复查找方法,就像getMethod()这样,但考虑到多态性,以便上面的反射示例可以print(Object)在查询 …