2009-10-27 5 views
0

Je suivais sur cette question, 1268817Suivi: Créer un tableau d'objets de classname

Dans la question, nous trouvons un moyen de créer un isntance d'un objet donné un nom (comme une chaîne) de la classe.

Mais que diriez-vous de créer un tableau de ces objets ... comment on pourrait initialiser cela.

Je pensais quelque chose dans la ligne de mais ne marche pas semble travailler

Object[] xyz = Class.forName(className).newInstance()[]; 
+0

complètement en dehors de la question -> "Suivi" - serait une fonctionnalité intéressante sur le SO - - Lier une question avec les questions de suivi et/ou les réponses - et aussi laisser les personnes précédentes qui ont demandé et répondu à savoir qu'un suivi a été initié ... – bushman

+0

@bushman, checkout meta.stackoverflow.com, où vous peut poster et discuter de telles suggestions. – Yishai

Répondre

2
Object objects = java.lang.reflect.Array.newInstance(Class.forName(classname), 10); 

Pour un tableau de 10 éléments.

Annoyingly, il retourne un objet, au lieu d'un tableau d'objets.

Comme Tom souligne, cela est de permettre:

Object objects = java.lang.reflect.Array.newInstance(int.class, 10); 

Un int [] est incessible à un objet [], de sorte que le type de retour doit être un objet. Mais c'est toujours énervant car vous ne le faites que très rarement.

+0

Ce sera parce qu'il peut retourner un tableau de primitives. –

+0

Tom, pourriez-vous élaborer sur ce point? Quelle est la signification de retourner un tableau de primitives – bushman

+0

@Bushman, il signifie que si vous l'aviez créé un tableau si ints, cela ne pouvait pas être assigné à un tableau Object [], donc la méthode doit retourner Object, et non Object []. – Yishai

2

Utilisation Array:

Object[] xyz = Array.newInstance(Class.forName(className), 123); 

et attraper les exceptions appropriées.

+1

Vous aurez besoin d'un casting ici. –

0

Essayez:

Class<?> c = Class.forName(className); 
Object xyz = Array.newInstance(c, length); 
1

Voici un exemple la création d'un tableau de String:

// equiv to String strArray = new String()[10] 

Class cls = Class.forName("java.lang.String"); 
String[] strArray = (String[]) Array.newInstance(cls, 10);