Ver Mensaje Individual
  #1 (permalink)  
Antiguo 12/04/2007, 23:47
Avatar de buhoMc
buhoMc
 
Fecha de Ingreso: abril-2007
Mensajes: 5
Antigüedad: 17 años, 1 mes
Puntos: 0
Información Dudas con Invoke()

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