Одна вещь, которая приходит в голову:
java.lang.reflect.Array.newInstance(componentType, 0).getClass();
Но это создает ненужный экземпляр.
Кстати, это работает:
Class clazz = Class.forName("[L" + componentType.getName() + ";");
Вот тест. Это печатает true
:
Integer[] ar = new Integer[1];
Class componentType = ar.getClass().getComponentType();
Class clazz = Class.forName("[L" + componentType.getName() + ";");
System.out.println(clazz == ar.getClass());
Документация Class#getName()
строго определяет формат имен классов массивов:
Если этот объект класса представляет класс массивов, то внутренняя форма имени состоит из имени типа элемента, которому предшествует один или несколько символов '[', представляющих глубину вложения массива.
Подход Class.forName(..)
не будет работать напрямую для примитивов - для них вам придется создать отображение между именем (int
) и сокращением массива - (I
)