114 votes

Est-il possible d'instancier une classe par son nom en Java?

Je cherchais la question suivante: instancier une classe à partir de son nom de chaîne, qui décrit comment instancier une classe lorsqu'elle porte son nom. Y a-t-il un moyen de le faire en Java? J'aurai le nom du paquet et le nom de la classe et je dois être capable de créer un objet ayant ce nom particulier.

269voto

Simon Nickerson Points 17147

De deux façons:

Méthode 1 - uniquement pour les classes ayant un no-arg constructeur

Si votre classe a aucun-arg constructeur, vous pouvez obtenir un Class objet à l'aide d' Class.forName() et l'utilisation de l' newInstance() méthode pour créer une instance (mais attention, cette méthode est souvent considéré comme mauvais , car il peut vaincre Java est cochée, les exceptions).

Par exemple:

Class<?> clazz = Class.forName("java.util.Date");
Object date = clazz.newInstance();

Méthode 2

Une alternative plus sûre approche qui fonctionne également si la classe n'ont pas de no-arg constructeurs est d'interroger votre objet de classe pour obtenir son Constructor objet et l'appel d'un newInstance() méthode sur cet objet:

Class<?> clazz = Class.forName("com.foo.MyClass");
Constructor<?> constructor = clazz.getConstructor(String.class, Integer.class);
Object instance = constructor.newInstance("stringparam", 42);

Les deux méthodes sont connues comme réflexion. Vous aurez généralement à capturer les diverses exceptions qui peuvent se produire, y compris des choses comme:

  • la JVM ne peut pas trouver ou ne peut pas charger votre classe
  • la classe que vous essayez d'instancier n'a pas le droit de tri des constructeurs
  • le constructeur lui-même généré une exception
  • le constructeur vous essayez d'invoquer n'est pas publique
  • un responsable de la sécurité a été installé et la prévention de la réflexion de se produire

16voto

scibuff Points 5796
MyClass myInstance = (MyClass) Class.forName("MyClass").newInstance();

3voto

Chandra Sekhar Points 6512

use Class.forName ("Nom de chaîne de la classe"). newInstance ();

 Class.forName("A").newInstance();
 

Cela entraînera une classe nommée A initialisée.

0voto

Chen Harel Points 2425
String str = (String)Class.forName("java.lang.String").newInstance();

0voto

Shashank Kadne Points 4531

quelque chose comme ça devrait marcher ...

 String name = "Test2";//Name of the class
        Class myClass = Class.forName(name);
        Object o = myClass.newInstance();
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X