Как получить этот метод объекта с помощью отражения? - PullRequest
0 голосов
/ 21 февраля 2011

Это класс:

public class Foo {
  public void bar(Integer[] b) {
  }
}

Теперь я пытаюсь получить этот метод с помощью отражения:

Class cls = Foo.class;
Class[] types = { /* what is here */ };
cls.getMethod("bar", types);

Как создать этот "тип"?

Ответы [ 3 ]

3 голосов
/ 21 февраля 2011

Integer[].class - это литерал класса для целочисленного массива. Если вам это нужно динамически, вы можете использовать Class.forName("[Ljava.lang.Integer;"), как заметил Дэвид.

Если вы не знаете точных типов, вы можете вызвать getMethods(), повторить возвращенный массив и сравнить имена.

Spring имеет служебный класс ReflectionUtils, в котором есть findMethod(..), который делает это.

1 голос
/ 21 февраля 2011
Integer[].class

бла-бла-бла-бла-бла-бла

0 голосов
/ 22 февраля 2011

Немного глупо, что Class не имеет метода для предоставления соответствующего класса массива, только наоборот. Вот обходной путь:

<E> public static Class<E[]> arrayClass(Class<E> elementClass) {
    @SuppressWarnings("unchecked")
    Class<E[]> arrayClass = (Class<E[]>) Array.newInstance(elementClass, 0).getClass();
    return arrayClass;
}

С помощью этого метода вы можете написать

Class cls = Foo.class;
Class[] types = { arrayClass(Integer.class) };
cls.getMethod("bar", types);

Конечно, если вы можете написать Integer.class, вы также можете написать Integer[].class. Так что это полезно, только если вы знаете, что ваш метод принимает массив некоторого класса, который вы получаете только как объект класса, в противном случае используйте ответы, данные Божо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...