Создать статический массив, используя Class.forName

В Android есть необъявленный (скрытый) класс с именем android.graphics.FontFamily, и я хочу создать его статический массив. Любая вещь, как это:

Class<?> clazz = Class.forName("android.graphics.FontFamily"); // Ok.
Class<?> clazz_array = Class.forName("android.graphics.FontFamily[]"); // Method threw 'java.lang.ClassNotFoundException' exception.

Чтобы построить этот гипотетический код:

FontFamily[] families = {fontFamily};

Как мне это сделать?

Спасибо.

2 ответа

Решение

Вы должны иметь возможность создать массив рефлексивно, а затем получить его класс. Пример:

Class <?> clazz = Class.forName("android.graphics.FontFamily");
Object fontFamily = clazz.newInstance();
Object families = Array.newInstance(clazz, 1);
Array.set(families, 0, fontFamily);

Вы должны указать полное имя, как указано в Class документация Так что в вашем случае это будет:

Class<?> clazzArray = Class.forName("[Landroid.graphics.FontFamily;");

[ указывает массив, а затем L префикс и суффикс точки с запятой указывают, что часть в середине является именем класса.

Другие вопросы по тегам