2011-10-17 3 views
4

Je dois créer une nouvelle instance d'une classe à partir d'un tableau d'objets de classe comme ceci:Construire instance de classe de l'objet de classe en Java

static Class[] spells = {Fireball.class, Iceball.class}; 

Alors, quand je veux appeler la boule de feu que je devrais être en mesure de faire quelque chose comme

Spell Currentspell = new spells[0](posx, posy); 

Fireball et Iceball est d'ailleurs des classes enfant de Spell.

Comment faire?

Merci pour ce qui concerne.

+1

Il peut être préférable pour vous de nous dire quel effet vous essayez d'atteindre plutôt que ce code » re actuellement en utilisant pour essayer de l'atteindre. Il peut y avoir une façon plus propre de faire tout cela, une fois que nous savons ce que tout cela est. Mon radar d'odeur de code monte toujours lorsque je vois une utilisation intensive de la réflexion dans une application qui n'a généralement pas besoin de faire cela. –

Répondre

9
Constructor constructor = spells[0].getConstructor(int.class, int.class); 
Spell Currentspell = (Spell)constructor.newInstance(posx, posy); 
+0

J'essaie de faire ceci: 'try { Constructeur constructor = spells [0] .getConstructor (Integer.class, Integer.class); Spell Currentspell = (Spell) constructor.newInstance (100, 100); } catch (Throwable e) { System.err.println (e); } ' Mais il ne me donne pas une erreur ou créer l'instance de classe –

+0

@KristofferDorph est instance de' Currentspell' null? essayez d'attraper 'Exception e' plutôt que' Throwable e'. En outre, pouvez-vous poster le constructeur de 'Fireball' que vous essayez d'utiliser? –

+0

Merci beaucoup, ça marche! :-) C'était une petite erreur de ma part, mais tu l'as résolu, merci beaucoup! –

0

Vous utilisez la méthode getConstructor() pour obtenir le constructeur spécifique que vous voulez et ensuite appeler newInstance() sur l'objet constructeur.

0

Eh bien, pour une chose que vous voulez réduire le type de classe qui peut être stockée dans votre tableau. Et en second lieu, votre code d'instanciation est désactivé. Sans entrer dans ce wether est la meilleure façon d'y parvenir, voici quelques-uns (mieux) Code:

static Class<Spell>[] spells = new Class<Spell>[] { Fireball.class, Iceball.class }; 
Spell currentSpell = spells[someIndex].newInstance(); 
Questions connexes