How to get this Method object via reflection?
This is the class:
public class Foo {
public void bar(Integer[] b) {
}
}
Now I'm开发者_运维百科 trying to get this method via reflection:
Class cls = Foo.class;
Class[] types = { /* what is here */ };
cls.getMethod("bar", types);
How to create this "type"?
Integer[].class
- this is the class literal for the integer array. If you need it dynamically, you can use Class.forName("[Ljava.lang.Integer;")
as David noted.
If you don't know the exact types, you can call getMethods()
, iterate the returned array and compare names.
Spring has an utility class ReflectionUtils
, which have findMethod(..)
that do this.
Integer[].class
blah blah blah blah blah blah
It is a bit stupid that Class
has no method to give the corresponding array class, only the other way around. Here is a workaround:
<E> public static Class<E[]> arrayClass(Class<E> elementClass) {
@SuppressWarnings("unchecked")
Class<E[]> arrayClass = (Class<E[]>) Array.newInstance(elementClass, 0).getClass();
return arrayClass;
}
With this method you could write
Class cls = Foo.class;
Class[] types = { arrayClass(Integer.class) };
cls.getMethod("bar", types);
Of course, if you can write Integer.class
, you could also write Integer[].class
. So this is only useful if you know your method takes an array of some class which you only get as a class object, otherwise use the answers given by Bozho.
精彩评论