Hola, tengo una duda, no sé como utilizar invoke() para pasar un Array como parámetro.
Tengo 2 clases:
- Persona (para el ejemplo considero solo la propiedad edad).
- Personas (que tiene un Array de personas, Persona[] personas).
La función setJB(String edad) retorna una instancia de Persona, inicializada con la edad enviada.
public Object setJB(String edad)
{
Object jb = null;
try{
jb = Beans.instantiate(null, "clases.Persona");
Class[] argTypes = { String.class };
Object[] ctorArgs = { edad };
Object[] setterArgs = new Object[] {
Byte.class.getConstructor(argTypes).newInstance(ct orArgs) };
PropertyDescriptor pd = getPropertyDescriptors(jb.getClass())[1];
Method setter = pd.getWriteMethod();
if (setterArgs != null)
setter.invoke(jb, setterArgs);
else
System.out.println("Error");
Method printer = jb.getClass().getMethod("print", null);
printer.invoke(jb, null);
}catch(Exception e){System.out.println(e);}
return jb;
}
Hasta aquí todo va bien, el problema está en el procedimiento setJB1(), que tal como está, solo puede crear una instancia de Personas y pasar un parámetro de tipo Persona recibido de setJB(edad), esto modificando la clase Personas para que en lugar de recibir un Array (Persona[] personas) reciba una instancia (Persona persona). Lo que deseo es precisamente pasar un Array de tipo Persona {argBean1, argBean2} en lugar de una sola instancia Persona.
public void setJB1()
{
Object jb = null;
try{
jb = Beans.instantiate(null, "clases.Personas");
Object argBean1 = setJB("23");
Object argBean2 = setJB("24");
Object[] setterArgs = new Object[] { argBean1 };
PropertyDescriptor pd = getPropertyDescriptors(jb.getClass())[1];
Method setter = pd.getWriteMethod();
if (setterArgs != null)
setter.invoke(jb, setterArgs);
else
System.out.println("Error");
Method printer = jb.getClass().getMethod("print", null);
printer.invoke(jb, null);
}catch(Exception e){System.out.println(e);}
}
Gracias