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.
Réponses
Trop de publicités?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