una tipos tener que puede programacion ejercicios ejemplos cuantos constructores clase java constructor

tener - tipos de constructor java



¿Puedo usar Class.newInstance() con argumentos de constructor? (8)

Asumiendo que tienes el siguiente constructor

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

Necesitarás mostrar que pretendes usar este constructor así:

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

Me gustaría usar Class.newInstance() pero la clase que estoy creando no tiene un constructor nulo. Por lo tanto necesito poder pasar en argumentos del constructor. ¿Hay alguna forma de hacer esto?





Puedes usar el método getDeclaredConstructor de Class. Se espera una serie de clases. Aquí hay un ejemplo probado y de trabajo:

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; } }


Siga los pasos a continuación para llamar a consturctor parametrizado.

  1. Obtenga Constructor con tipos de parámetros pasando tipos en Class[] para el método getDeclaredConstructor de Class
  2. Cree una instancia de constructor pasando valores en Object[] para
    Método newInstance del Constructor

Código de ejemplo:

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[]{""}); } }

salida:

java NewInstanceWithReflection Default constructor Constructor :String =>


Class.getDeclaredConstructor(String.class).newInstance("HERESMYARG");


myObject.getClass().getDeclaredConstructors(types list).newInstance(args list);

Edición: según los comentarios, parece que señalar nombres de clases y métodos no es suficiente para algunos usuarios. Para obtener más información, eche un vistazo a la documentación para obtener constuctor e invocarlo .