Una cosa que viene a la mente es:
java.lang.reflect.Array.newInstance(componentType, 0).getClass();
Pero crea una instancia innecesaria.
Por cierto, esto parece funcionar:
Class clazz = Class.forName("[L" + componentType.getName() + ";");
Aquí está la prueba. Imprime true
:
Integer[] ar = new Integer[1];
Class componentType = ar.getClass().getComponentType();
Class clazz = Class.forName("[L" + componentType.getName() + ";");
System.out.println(clazz == ar.getClass());
The documentation of Class#getName()
define estrictamente el formato de nombres de clase de matriz:
Si esta clase de objeto representa una clase de matrices, a continuación, la forma interna del nombre consiste en el nombre de la tipo de elemento precedido por uno o más '[' caracteres que representan la profundidad de la matriz anidando.
El enfoque Class.forName(..)
no va a trabajar directamente para las primitivas sin embargo - para ellos habría que crear una correlación entre el nombre (int
) y la matriz abreviada - (I
)
Los primeros ve rsion (utilizando 'Array.newInstance (...). getClass()') * does * work for primitives. – finnw
sí, mi punto era que el segundo no. – Bozho
Esto es muy útil, gracias. Para mis propósitos, no necesito manipular primitivas, por lo que cualquiera de los enfoques es utilizable. –