web-dev-qa-db-fra.com

Obtenir le type de classe de String

J'ai un String qui porte le nom d'une classe, disons "Ex" (non .class _ extension). Je veux l'assigner à une variable Class, comme ceci:

Class cls = (string).class

Comment puis je faire ça?

68
Steven
Class<?> cls = Class.forName(className);

Mais votre className devrait être pleinement qualifié - c’est-à-dire com.mycompany.MyClass

148
Bozho
String clsName = "Ex";  // use fully qualified name
Class cls = Class.forName(clsName);
Object clsInstance = (Object) cls.newInstance();

Consultez le Java trace du didacticiel sur Reflection à l'adresse http://Java.Sun.com/docs/books/tutorial/reflect/TOC.html pour plus de détails.

40
JuanZe

Vous pouvez utiliser la méthode forName de Class:

Class cls = Class.forName(clsName);
Object obj = cls.newInstance();
6
rsp

Vous pouvez obtenir la référence de classe de n'importe quelle classe pendant l'exécution à l'aide du concept de réflexion Java.

Vérifiez le code ci-dessous. L'explication est donnée ci-dessous

Voici un exemple qui utilise Class renvoyé pour créer une instance de AClass:

package com.xyzws;
class AClass {
    public AClass() {
        System.out.println("AClass's Constructor"); 
    }  
    static {   
        System.out.println("static block in AClass");  
    }
}
public class Program {   
    public static void main(String[] args) {
        try {       
            System.out.println("The first time calls forName:");   
            Class c = Class.forName("com.xyzws.AClass");      
            AClass a = (AClass)c.newInstance();    
            System.out.println("The second time calls forName:");  
            Class c1 = Class.forName("com.xyzws.AClass"); 
        } catch (ClassNotFoundException e) { 
            // ...
        } catch (InstantiationException e) {  
            // ...
        } catch (IllegalAccessException e) { 
            // ...
        }     
    }
}

La sortie imprimée est

    The first time calls forName:
    static block in AClass
    AClass's Constructor
    The second time calls forName:

La classe a déjà été chargée, il n'y a donc pas de deuxième "bloc statique dans AClass"

l'explication est ci-dessous

Class.ForName est appelé pour obtenir un objet de classe.

En utilisant l'objet Class, nous créons la nouvelle instance de la classe.

Si vous avez des doutes, faites le moi savoir

4
gmhk

eeh .. Class.forName (nom de classe String)?

3
Hans Westerbeek

Vous ne savez pas exactement ce que vous demandez, mais ... Class.forname , peut-être?

2
Manrico Corazzi