Немного глупо, что 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
. Так что это полезно, только если вы знаете, что ваш метод принимает массив некоторого класса, который вы получаете только как объект класса, в противном случае используйте ответы, данные Божо.