Je connais le nom de la classe, disons "MyClass" et je veux récupérer l'objet Class
, c'est-à-dire. MyClass.class pour les futures références. Y-a-t-il un moyen de faire ça?
J'ai parcouru le Web, mais la plupart des choses que j'ai trouvées à ce sujet concernaient le ClassLoader
, qui, je suppose, ne convient pas à mon cas. Je ne veux pas initialiser une classe, mais seulement obtenir un objet de classe pour de futures utilisations.
EDIT: Concernant les premières réponses à cela:
J'ai déjà vérifié la méthode forName()
mais je pensais que cela devait 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?
Voudrais
Class.forName("MyClass", false, null);
revenir MyClass.class
?
En fait, ce que je veux faire, c'est remplacer un tableau d'ID de chaîne associé à des objets Class
, par un tableau d'ID à partir duquel les objets de classe sont récupérés automatiquement, pour se débarrasser de certains travaux manuels :)
Merci pour les réponses rapides et désolé de ne pas l'avoir mentionné auparavant.
Vous pouvez utiliser:
Class c = Class.forName("com.package.MyClass");
Et instancier plus tard un objet:
Object obj = c.newInstance();
EDIT: Ceci est juste le cas d'utilisation le plus simple. Comme indiqué dans les commentaires, vous devrez tenir compte des arguments du constructeur et des exceptions levées par le processus d'initialisation. JavaDocs pour newInstance
a tous les détails.
Class.forName("MyClass")
Lire le JavaDoc pour plus de détails
Il semble que vous puissiez utiliser la fonction Class
class statique méthode forName
.
Il convient également 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);
}