Una cosa che viene in mente è:
java.lang.reflect.Array.newInstance(componentType, 0).getClass();
Ma crea un'istanza inutile.
Btw, questo sembra funzionare:
Class clazz = Class.forName("[L" + componentType.getName() + ";");
Ecco test. Esso stampa 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()
definisce rigorosamente il formato dei nomi classe array:
Se questo oggetto classe rappresenta una classe di array, allora la forma interna del nome costituito dal nome del tipo di elemento preceduto da uno o più caratteri '[' che rappresentano la profondità del nesting dell'array.
L'approccio Class.forName(..)
non lavorerà direttamente per primitive anche se - per loro che avrebbe dovuto creare una mappatura tra il nome (int
) e la stenografia array - (I
)
Il primo ve rsion (usando 'Array.newInstance (...). getClass()') * fa * funziona per le primitive. – finnw
sì, il mio punto era il secondo no. – Bozho
Questo è molto utile, grazie. Per i miei scopi, non ho bisogno di gestire le primitive in modo che l'approccio sia utilizzabile. –