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 nullary. Par conséquent, je dois pouvoir transmettre des arguments de constructeur. Y a-t-il un moyen de faire cela?

 Class.getDeclaredConstructor(Ssortingng.class).newInstance("HERESMYARG"); 
 myObject.getClass().getDeclaredConstructors(types list).newInstance(args list); 

Edit: selon les commentaires, il semble que les noms de classe et de méthode de pointage ne suffisent pas à certains utilisateurs. Pour plus d’informations, consultez la documentation pour obtenir une confirmation et l’ invoquer .

En supposant que vous avez le constructeur suivant

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

Vous devrez montrer que vous avez l’intention d’utiliser ce constructeur comme suit:

 Class classToLoad = 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] = Ssortingng.class; //Second argument is of *object* type Ssortingng cArg[2] = int.class; //Third argument is of *primitive* type int Long l = new Long(88); Ssortingng s = "text"; int i = 5; classToLoad.getDeclaredConstructor(cArg).newInstance(l, s, i); 

N’utilisez pas Class.newInstance() ; voir ce fil: Pourquoi Class.newInstance () est-il mal?

Comme d’autres réponses, utilisez Constructor.newInstance() place.

Vous pouvez obtenir d’autres constructeurs avec getConstructor (…) .

Suivez les étapes ci-dessous pour appeler le consturctor paramétré.

  1. Get Constructor avec des types de parameters en transmettant des types dans Class[] pour la méthode getDeclaredConstructor de Class
  2. Créer une instance de constructeur en transmettant des valeurs dans Object[] pour
    newInstance method du Constructor

Exemple de code:

 import java.lang.reflect.*; class NewInstanceWithReflection{ public NewInstanceWithReflection(){ System.out.println("Default constructor"); } public NewInstanceWithReflection( Ssortingng a){ System.out.println("Constructor :Ssortingng => "+a); } public static void main(Ssortingng args[]) throws Exception { NewInstanceWithReflection object = (NewInstanceWithReflection)Class.forName("NewInstanceWithReflection").newInstance(); Constructor constructor = NewInstanceWithReflection.class.getDeclaredConstructor( new Class[] {Ssortingng.class}); NewInstanceWithReflection object1 = (NewInstanceWithReflection)constructor.newInstance(new Object[]{"StackOverFlow"}); } } 

sortie:

 java NewInstanceWithReflection Default constructor Constructor :Ssortingng => StackOverFlow 

Vous pouvez utiliser la méthode getDeclaredConstructor de Class. Il attend un tableau de classes. Voici un exemple testé et fonctionnel:

 public static JFrame createJFrame(Class c, Ssortingng name, Component parentComponent) { try { JFrame frame = (JFrame)c.getDeclaredConstructor(new Class[] {Ssortingng.class}).newInstance("name"); if (parentComponent != null) { frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } else { frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); } frame.setLocationRelativeTo(parentComponent); frame.pack(); frame.setVisible(true); } catch (InstantiationException instantiationException) { ExceptionHandler.handleException(instantiationException, parentComponent, Language.messages.get(Language.InstantiationExceptionKey), c.getName()); } catch(NoSuchMethodException noSuchMethodException) { //ExceptionHandler.handleException(noSuchMethodException, parentComponent, Language.NoSuchMethodExceptionKey, "NamedConstructor"); ExceptionHandler.handleException(noSuchMethodException, parentComponent, Language.messages.get(Language.NoSuchMethodExceptionKey), "(Constructor or a JFrame method)"); } catch (IllegalAccessException illegalAccessException) { ExceptionHandler.handleException(illegalAccessException, parentComponent, Language.messages.get(Language.IllegalAccessExceptionKey)); } catch (InvocationTargetException invocationTargetException) { ExceptionHandler.handleException(invocationTargetException, parentComponent, Language.messages.get(Language.InvocationTargetExceptionKey)); } finally { return null; } } 

Je pense que c’est exactement ce que vous voulez http://da2i.univ-lille1.fr/doc/tutorial-java/reflect/object/arg.html

Bien que cela semble être un fil mort, quelqu’un pourrait le trouver utile