Ver Mensaje Individual
  #6 (permalink)  
Antiguo 18/04/2007, 00:53
GreenEyed
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 7 meses
Puntos: 51
Re: Dudas con Invoke()

Si quieres hacerlo generico, no puede haber "casting" al tipo en concreto por ningun lado. El casting es una indicación al compilador, así que para un programa genérico que usa tipos en tiempo de ejecución no sirve.

De todas formas, he estado mirando un poco y se ve que usar la clase Array no sirve, inexplicablemente, puesto que no se puede usar una instancia de Array donde se usaria un array ni hay metodo de conversión.... en fin. Peeeero, se puede arreglar usando List

Aquí un ejemplo de como crear un StringBuffer en tiempo de ejecución usando el constructor que recibe un String. El string se podría crear tambien de forma genérica con su constructor etc... pero lo he puesto "a pelo" para no complicar aun más el codigo, que ya es de por si bastante "interesante" .

Código:
    Class genericFinalClass = Class.forName("java.lang.StringBuffer");
    Class genericClass = Class.forName("java.lang.String");
    List contructorArgsList = new ArrayList(1);
    contructorArgsList.add(genericClass);
    Constructor genericConstructor = genericFinalClass
        .getConstructor((Class[]) contructorArgsList.toArray(new Class[]{}));

    // Aqui construyo el String a pelo, aunque se podría construir tambien
   // de forma generica.
    String testString = "Prueba prueba";
    List contructorObjsList = new ArrayList(1);
    contructorObjsList.add(testString);    
    Object genericInstance = genericConstructor.newInstance(contructorObjsList.toArray());
    System.err.println("genericInstance.getClass().getName(): " + genericInstance.getClass().getName());
    System.err.println("genericInstance.toString(): " + genericInstance.toString());
S!