2009-11-05 4 views
14

Ho una variabile Class che contiene un determinato tipo e ho bisogno di ottenere una variabile che contenga la corrispondente classe di array. Il meglio che potrei inventare è questo:Come ottenere la classe Array per una determinata classe in Java?

Class arrayOfFooClass = java.lang.reflect.Array.newInstance(fooClass, 0).getClass(); 

C'è un modo per farlo senza creare la nuova istanza?

risposta

11

Se non si desidera creare un esempio, è possibile creare il nome canonico della matrice manualmente e ottenere la classe per nome:

// Replace `String` by your object type. 
Class stringArrayClass = Class.forName(
    "[L" + String.class.getCanonicalName() + ";" 
); 

Ma Jakob Jenkov argues in his blog che la soluzione è la migliore, perché non ha bisogno di armeggiare con le stringhe.

Class stringArrayClass = Array.newInstance(String.class, 0).getClass(); 
+2

Si inizia con quanto sopra e finisce con quello che ho. Quindi immagino che 'newInstance' sia il modo più pulito per farlo. –

+0

Funziona in entrambi i modi, ma hai detto che non vuoi creare una nuova istanza. –

+0

Vero. In realtà stavo cercando una soluzione più pulita. Non è che non voglio la nuova istanza ma che preferirei non averne una :-) –

-1
Class stringArrayOfClass = String[].class; 
+0

Non conosco il tipo in anticipo; è in una variabile di classe. Quindi il tuo metodo non funzionerebbe. –

+2

Grazie per averlo indicato –