273 votes

Puis-je utiliser Class.newInstance() avec des arguments de constructeur ?

Je voudrais utiliser Class.newInstance() mais la classe que j'instancie n'a pas de constructeur nul. J'ai donc besoin de pouvoir passer des arguments de constructeur. Existe-t-il un moyen de le faire ?

241voto

jsight Points 16025
Class.getDeclaredConstructor(String.class).newInstance("HERESMYARG");

91voto

Marko Points 13736
myObject.getClass().getDeclaredConstructors(types list).newInstance(args list);

Edit : d'après les commentaires, il semble que pointer les noms de classes et de méthodes ne soit pas suffisant pour certains utilisateurs. Pour plus d'informations, jetez un coup d'oeil à la documentation de obtenir un constucteur et l'invoquer .

85voto

Martin Konecny Points 7328

En supposant que vous avez le constructeur suivant

class MyClass {
    public MyClass(Long l, String s, int i) {

    }
}

Vous devrez sélectionner votre intention d'utiliser ce constructeur de la manière suivante :

Class c = MyClass.class;

Class[] cArg = new Class[3]; //Our constructor has 3 arguments
cArg[0] = Long.class; //First argument is of *object* type Long
cArg[1] = String.class //Second argument is of *object* type String
cArg[2] = int.class; //Third argument is of *primitive* type int

Long l = new Long(88);
String s = "text";
int i = 5;

classToLoad.getDeclaredConstructor(cArg).newInstance(l, s, i);

19voto

Chris Jester-Young Points 102876

Ne pas utiliser Class.newInstance() ; voir ce fil : Pourquoi Class.newInstance() est-il mauvais ?

Comme d'autres réponses le disent, utilisez Constructor.newInstance() à la place.

9voto

iny Points 3925

Vous pouvez obtenir d'autres constructeurs avec getConstructor(...) .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X