yegor256
yegor256

Reputation: 105213

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"?

Upvotes: 0

Views: 313

Answers (3)

Paŭlo Ebermann
Paŭlo Ebermann

Reputation: 74800

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.

Upvotes: 0

Bozho
Bozho

Reputation: 597412

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.

Upvotes: 3

irreputable
irreputable

Reputation: 45453

Integer[].class

blah blah blah blah blah blah

Upvotes: 1

Related Questions