Создать статический массив, используя 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
префикс и суффикс точки с запятой указывают, что часть в середине является именем класса.