Posso usar Class.newInstance () com argumentos de construtor?

Eu gostaria de usar Class.newInstance() mas a class que estou instanciando não tem um construtor nulo. Portanto, preciso ser capaz de passar argumentos de construtor. Existe uma maneira de fazer isso?

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

Edit: de acordo com os comentários parece apontar nomes de class e método não é suficiente para alguns usuários. Para mais informações, dê uma olhada na documentação para obter constuctor e invocá-lo .

Supondo que você tenha o seguinte construtor

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

Você precisará mostrar que pretende usar este construtor da seguinte forma:

 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] = 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); 

Não use Class.newInstance() ; veja este tópico: Por que o Class.newInstance () é maligno?

Como outras respostas, use Constructor.newInstance() .

Você pode obter outros construtores com getConstructor (…) .

Siga os passos abaixo para chamar o consturctor parametrizado.

  1. Obtenha Constructor com tipos de parâmetro passando tipos em Class[] para o método getDeclaredConstructor da Class
  2. Criar instância de construtor passando valores em Object[] para
    newInstance método do Constructor

Exemplo de código:

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

saída:

 java NewInstanceWithReflection Default constructor Constructor :String => StackOverFlow 

Você pode usar o método getDeclaredConstructor da class. Espera uma matriz de classs. Aqui está um exemplo testado e funcional:

 public static JFrame createJFrame(Class c, String name, Component parentComponent) { try { JFrame frame = (JFrame)c.getDeclaredConstructor(new Class[] {String.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; } } 

Eu acho que isso é exatamente o que você quer http://da2i.univ-lille1.fr/doc/tutorial-java/reflect/object/arg.html

Embora pareça um fio morto, alguém pode achar útil