Existe-t-il un moyen de créer une instance d'une classe particulière compte tenu du nom de classe (dynamique) et de passer des paramètres à son constructeur.
Quelque chose comme:
Object object = createInstance("mypackage.MyClass","MyAttributeValue");
Où "MyAttributeValue"
est un argument pour le constructeur de MyClass
.
java
reflection
instantiation
TheLameProgrammer
la source
la source
newInstance()
est une méthode varargs (tout commeGetConstructor()
), il n'y a pas besoin deObject
création de tableau explicite .Object[]
argument, je préfère créer le tableau explicitement dans ce cas.Vous pouvez utiliser
Class.forName()
pour obtenir unClass
objet de la classe souhaitée.Utilisez ensuite
getConstructor()
pour trouver l'Constructor
objet souhaité .Enfin, appelez
newInstance()
cet objet pour obtenir votre nouvelle instance.la source
Vous pouvez utiliser des réflexions
la source
Class.forName(className).getConstructor().newInstance();
;)Si la classe n'a qu'un seul constructeur vide (comme Activity ou Fragment etc, classes android):
la source
Constructor<?> ctor = clazz.getConstructor(String.class)
ne semblait pas fonctionner pour moi.lors de l'utilisation (ie),
getConstructor(String.lang)
le constructeur doit être déclaré public. Sinon, unNoSuchMethodException
est lancé.si vous voulez accéder à un constructeur non public, vous devez utiliser à la place (ie)
getDeclaredConstructor(String.lang)
.la source
Vous souhaitez utiliser java.lang.reflect.Constructor.newInstance (Object ...)
la source
Un moyen très simple de créer un objet en Java en utilisant
Class<?>
les arguments du constructeur en passant:Cas 1: - Voici un petit code dans cette
Main
classe:Et, voici la
Base
structure des classes:Cas 2: - Vous pouvez coder de manière similaire pour le constructeur avec plusieurs arguments et copier le constructeur. Par exemple, la transmission de 3 arguments en tant que paramètre au
Base
constructeur nécessitera la création du constructeur en classe et un changement de code ci-dessus comme suit:Et ici, la classe Base devrait ressembler à:
Remarque: - N'oubliez pas de gérer les différentes exceptions qui doivent être traitées dans le code.
la source
Si quelqu'un cherche un moyen de créer une instance d'une classe malgré la classe suivant le modèle Singleton, voici un moyen de le faire.
Cela ne fonctionne que pour les classes qui implémentent un modèle singleton à l'aide d'un constructeur privé.
la source
Vous pouvez également appeler des méthodes à l'intérieur de l'objet créé.
Vous pouvez créer un objet instantanément en appelant le premier constructeur, puis en invoquant la première méthode dans l'objet créé.
la source
String
comme paramètre? Devient un peu désordonné lorsque vous changez l'ordre du constructeurgetConstructor(ClassName.class)
mieux, je suppose. Même si l'ordre des constructeurs change en classe, pas besoin de trouver la position manuellementUne autre réponse utile. Comment utiliser getConstructor (params) .newInstance (args)?
Dans mon cas, le constructeur de ma classe prend Webdriver comme paramètre, donc utilisé ci-dessous le code:
la source