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?
Class<?> cls = Class.forName(className);
Mais votre className
devrait être pleinement qualifié - c’est-à-dire com.mycompany.MyClass
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.
Vous pouvez utiliser la méthode forName
de Class
:
Class cls = Class.forName(clsName);
Object obj = cls.newInstance();
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
eeh .. Class.forName (nom de classe String)?
Vous ne savez pas exactement ce que vous demandez, mais ... Class.forname , peut-être?