开发者

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.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜