web-dev-qa-db-fra.com

Comment obtenir un objet de classe à partir du nom de classe dans Java

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.

37
alkar

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.

53
Tony the Pony
Class.forName("MyClass")

Lire le JavaDoc pour plus de détails

7
Joachim Sauer

Il semble que vous puissiez utiliser la fonction Class class statique méthode forName .

3
Thomas Owens

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);
    }
2
Droo