Je cherchais comme question: instancier une classe à partir de son nom de chaîne qui décrit comment instancier une classe en ayant son nom. Existe-t-il un moyen de le faire en Java? J'aurai le nom du package et le nom de la classe et je dois être capable de créer un objet portant ce nom particulier.
java
string
object
instantiation
ict1991
la source
la source
Réponses:
Deux manières:
Méthode 1 - uniquement pour les classes ayant un constructeur sans argument
Si votre classe a un constructeur sans argument, vous pouvez obtenir un
Class
objet en utilisantClass.forName()
et utiliser lanewInstance()
méthode pour créer une instance (mais attention, cette méthode est souvent considérée comme mauvaise car elle peut vaincre les exceptions vérifiées par Java).Par exemple:
Méthode 2
Une approche alternative plus sûre qui fonctionne également si la classe n'a pas de constructeur sans argument consiste à interroger votre objet de classe pour obtenir son
Constructor
objet et appeler unenewInstance()
méthode sur cet objet:Les deux méthodes sont appelées réflexion . Vous devrez généralement attraper les différentes exceptions qui peuvent se produire, y compris des choses comme:
la source
newInstance()
, pourrions-nous le renvoyer à notre propre objet?instance
àcom.foo.MyClass
? étant donné que com.foo.MyClass est juste une chaînela source
use Class.forName ("String name of class"). newInstance ();
Cela entraînera l'initialisation de la classe nommée A.
la source
Pour faciliter l'obtention du nom complet d'une classe afin de créer une instance en utilisant
Class.forName(...)
, on pourrait utiliser laClass.getName()
méthode. Quelque chose comme:Ensuite, vous pouvez convertir l'objet que vous récupérez dans la classe à laquelle vous passez
makeObject(...)
:la source
clazz.newInstance()
au lieu dugetName
alorsfromName
?Utiliser la réflexion Java
Création de nouveaux objets Il n'y a pas d'équivalent à l'invocation de méthode pour les constructeurs, car appeler un constructeur équivaut à créer un nouvel objet (pour être le plus précis, la création d'un nouvel objet implique à la fois l'allocation de mémoire et la construction d'objet). Donc, l'équivalent le plus proche de l'exemple précédent est de dire:
qui trouve un constructeur qui gère les types de paramètres spécifiés et l'appelle, pour créer une nouvelle instance de l'objet. La valeur de cette approche est qu'elle est purement dynamique, avec une recherche et un appel de constructeur au moment de l'exécution, plutôt qu'au moment de la compilation.
la source
Class.forName ("ClassName") résoudra votre objectif.
la source
la source
quelque chose comme ça devrait fonctionner ...
la source
L'utilisation
newInstance()
directe est déconseillée à partir de Java 8. Vous devez l'utiliserClass.getDeclaredConstructor(...).newInstance(...)
avec les exceptions correspondantes.la source