Comment obtenir un objet de classe à partir du nom de classe en Java
Je connais le nom de la classe, disons "MyClass" et je veux récupérer l'objet Class
, c'est-à-dire. Maclasse.classe pour les références futures. Est-il un moyen de le faire?
J'ai regardé à travers le web, mais la plupart des choses que j'ai trouvées liées à cela concernaient le ClassLoader
, qui, je présume, ne conviennent pas à mon cas. Je ne veux pas initialiser une classe, mais seulement obtenir un objet de classe pour des utilisations futures.
EDIT: en ce qui concerne les premières réponses à ceci:
J'ai déjà vérifié la méthode forName()
mais je pensais que c'est censé aussi initialiser la classe. Maintenant, je peux l'appeler avec les arguments complets et passer false
au deuxième argument, mais le troisième devrait-il être null
ou quoi?
Serait
Class.forName("MyClass", false, null);
Retour MyClass.class
?
En fait, ce que je veux faire, c'est remplacer un tableau d'identifiants de chaîne associés aux objets Class
, par un tableau d'identifiants à partir desquels les objets de classe sont récupérés automatiquement, pour se débarrasser d'un travail manuel:)
Merci pour le réponses rapides et désolé de ne pas mentionner cela avant.
4 réponses
, Vous pouvez utiliser:
Class c = Class.forName("com.package.MyClass");
Et plus tard instancier un objet:
Object obj = c.newInstance();
EDIT: c'est juste le cas d'utilisation le plus simple. Comme indiqué dans les commentaires, vous devrez considérer les arguments du constructeur et les exceptions lancées par le processus d'initialisation. Le Javadoc newInstance
a tous les détails.
Class.forName("MyClass")
Lisez le JavaDoc pour plus de détails
, Il semble que vous pourriez être en mesure d'utiliser l'Class
de catégorie's statique forName
méthode.
Il est également intéressant de noter que les suggestions ci-dessus sont correctes, mais ne fonctionneront que pour les constructeurs par défaut (sans paramètre). Vous pouvez également faire quelque chose comme:
public Object newInstance(String className, Object...args) throws Exception {
Class<?> clazz = Class.forName(className);
if(args == null || args.length == 0) {
return clazz.newInstance();
}
List<Class<?>> argTypes = new ArrayList<Class<?>>();
for(Object object : args) {
argTypes.add(object.getClass());
}
Constructor<?> explicitConstructor = clazz.getConstructor(argTypes.toArray(new Class[argTypes.size()]));
return explicitConstructor.newInstance(args);
}